From b5de50fb67f352c95dd23a1ba1e8b6c61f526e62 Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Tue, 9 Sep 2025 18:02:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BF=9D=E6=B4=81=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BigScreen/ScreenController.java | 49 +++++++ .../CleanOrderRecordController.java | 106 ++++++++++++++ .../cleanOrder/CleanOrderController.java | 8 + .../mobile/MCustomerActivityController.java | 36 +++++ .../mobile/MInspectionTaskController.java | 11 ++ .../mobile/MServiceWorkOrdersController.java | 12 ++ .../org/dromara/property/domain/Clean.java | 4 + .../property/domain/CleanOrderRecord.java | 73 +++++++++ .../domain/bo/CleanOrderRecordBo.java | 74 ++++++++++ .../domain/bo/cleanOrderBo/CleanBo.java | 6 +- .../domain/bo/cleanOrderBo/CleanOrderBo.java | 4 + .../domain/vo/BigScreen/TodayMeetCountVo.java | 19 +++ .../BigScreen/TypeWorkOrderHistogramVo.java | 20 +++ .../domain/vo/CleanOrderRecordVo.java | 96 ++++++++++++ .../domain/vo/cleanOrderVo/CleanOrderVo.java | 3 + .../domain/vo/cleanOrderVo/CleanVo.java | 5 +- .../mapper/CleanOrderRecordMapper.java | 15 ++ .../service/ICleanOrderRecordService.java | 69 +++++++++ .../property/service/IMeetBookingService.java | 7 + .../service/IServiceWorkOrdersService.java | 15 +- .../IServiceWorkOrdersTypeService.java | 6 + .../cleanOrderService/ICleanOrderService.java | 8 + .../impl/CleanOrderRecordServiceImpl.java | 138 ++++++++++++++++++ .../service/impl/MeetBookingServiceImpl.java | 75 ++++++---- .../impl/ServiceWorkOrdersServiceImpl.java | 87 +++++++++++ .../ServiceWorkOrdersTypeServiceImpl.java | 12 ++ .../cleanOrderImpl/CleanOrderServiceImpl.java | 72 ++++++++- .../residentImpl/ResidentUnitServiceImpl.java | 6 +- .../dromara/gen/controller/GenController.java | 26 ++-- 29 files changed, 1012 insertions(+), 50 deletions(-) create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/BigScreen/ScreenController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CleanOrderRecordController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MCustomerActivityController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CleanOrderRecord.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanOrderRecordBo.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/BigScreen/TodayMeetCountVo.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/BigScreen/TypeWorkOrderHistogramVo.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CleanOrderRecordVo.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CleanOrderRecordMapper.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/service/ICleanOrderRecordService.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CleanOrderRecordServiceImpl.java diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/BigScreen/ScreenController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/BigScreen/ScreenController.java new file mode 100644 index 00000000..92065c28 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/BigScreen/ScreenController.java @@ -0,0 +1,49 @@ +package org.dromara.property.controller.BigScreen; + + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.R; +import org.dromara.common.web.core.BaseController; +import org.dromara.property.domain.MeetBooking; +import org.dromara.property.domain.vo.BigScreen.TodayMeetCountVo; +import org.dromara.property.domain.vo.BigScreen.TypeWorkOrderHistogramVo; +import org.dromara.property.service.IMeetBookingService; +import org.dromara.property.service.IServiceWorkOrdersService; +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.util.List; + +/** + * @author yuyongle + * @version 1.0 + * @description: 大屏接口 + * @date 2025/9/9 9:57 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/screen") +public class ScreenController extends BaseController { + + private final IServiceWorkOrdersService serviceWorkOrdersService; + private final IMeetBookingService meetBookingService; + + /** + * 大屏工单柱状图 + */ + @GetMapping("/typeWorkOrderHistogram") + public R> typeWorkOrderHistogram() { + return R.ok(serviceWorkOrdersService.typeWorkOrderHistogram()); + } + /** + * 大屏会议室总数和当天预约数统计 + */ + @GetMapping("/todayMeetCount") + public R todayMeetCount() { + return R.ok(meetBookingService.todayMeetCount()); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CleanOrderRecordController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CleanOrderRecordController.java new file mode 100644 index 00000000..ecc2b0c8 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CleanOrderRecordController.java @@ -0,0 +1,106 @@ +package org.dromara.property.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.property.domain.vo.CleanOrderRecordVo; +import org.dromara.property.domain.bo.CleanOrderRecordBo; +import org.dromara.property.service.ICleanOrderRecordService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 保洁订单记录 + * 前端访问路由地址为:/property/orderRecord + * + * @author mocheng + * @date 2025-09-09 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/orderRecord") +public class CleanOrderRecordController extends BaseController { + + private final ICleanOrderRecordService cleanOrderRecordService; + + /** + * 查询保洁订单记录列表 + */ + @SaCheckPermission("property:orderRecord:list") + @GetMapping("/list") + public TableDataInfo list(CleanOrderRecordBo bo, PageQuery pageQuery) { + return cleanOrderRecordService.queryPageList(bo, pageQuery); + } + + /** + * 导出保洁订单记录列表 + */ + @SaCheckPermission("property:orderRecord:export") + @Log(title = "保洁订单记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(CleanOrderRecordBo bo, HttpServletResponse response) { + List list = cleanOrderRecordService.queryList(bo); + ExcelUtil.exportExcel(list, "保洁订单记录", CleanOrderRecordVo.class, response); + } + + /** + * 获取保洁订单记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("property:orderRecord:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(cleanOrderRecordService.queryById(id)); + } + + /** + * 新增保洁订单记录 + */ + @SaCheckPermission("property:orderRecord:add") + @Log(title = "保洁订单记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody CleanOrderRecordBo bo) { + return toAjax(cleanOrderRecordService.insertByBo(bo)); + } + + /** + * 修改保洁订单记录 + */ + @SaCheckPermission("property:orderRecord:edit") + @Log(title = "保洁订单记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody CleanOrderRecordBo bo) { + return toAjax(cleanOrderRecordService.updateByBo(bo)); + } + + /** + * 删除保洁订单记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("property:orderRecord:remove") + @Log(title = "保洁订单记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(cleanOrderRecordService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cleanOrder/CleanOrderController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cleanOrder/CleanOrderController.java index 96ea5b21..f04ce659 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cleanOrder/CleanOrderController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cleanOrder/CleanOrderController.java @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.property.domain.bo.CleanOrderRecordBo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -90,6 +91,13 @@ public class CleanOrderController extends BaseController { public R edit(@Validated(EditGroup.class) @RequestBody CleanOrderBo bo) { return toAjax(cleanOrderService.updateByBo(bo)); } + /** + * 指派 + */ + @PostMapping("/assign") + public R assign(@Validated(EditGroup.class) @RequestBody CleanOrderBo bo) { + return toAjax(cleanOrderService.assign(bo)); + } /** * 删除保洁订单 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MCustomerActivityController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MCustomerActivityController.java new file mode 100644 index 00000000..4daa4c63 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MCustomerActivityController.java @@ -0,0 +1,36 @@ +package org.dromara.property.controller.mobile; + + +import cn.dev33.satoken.annotation.SaCheckPermission; +import lombok.RequiredArgsConstructor; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.property.domain.bo.CustomerActivityBo; +import org.dromara.property.domain.vo.CustomerActivityVo; +import org.dromara.property.service.ICustomerActivityService; +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/9 16:45 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/mobile/activity") +public class MCustomerActivityController { + private final ICustomerActivityService customerActivityService; + + /** + * 查询客户服务-活动列表 + */ + @GetMapping("/list") + public TableDataInfo list(CustomerActivityBo bo, PageQuery pageQuery) { + return customerActivityService.queryPageList(bo, pageQuery); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskController.java index c54525cc..b0db0991 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskController.java @@ -6,9 +6,12 @@ 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.InspectionTaskBo; +import org.dromara.property.domain.bo.ServiceWorkOrdersBo; import org.dromara.property.domain.vo.InspectionTaskVo; import org.dromara.property.domain.vo.mobile.MInspectionTaskVo; +import org.dromara.property.domain.vo.mobile.MServiceWorkOrdersVo; import org.dromara.property.service.IInspectionTaskService; +import org.dromara.property.service.IServiceWorkOrdersService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -26,6 +29,7 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/mobile/inspectionTask") public class MInspectionTaskController extends BaseController { private final IInspectionTaskService inspectionTaskService; + private final IServiceWorkOrdersService serviceWorkOrdersService; /** * 移动端查询巡检任务列表 @@ -34,4 +38,11 @@ public class MInspectionTaskController extends BaseController { public TableDataInfo list(InspectionTaskBo bo, PageQuery pageQuery) { return inspectionTaskService.mQueryPageList(bo, pageQuery); } + /** + * 小程序查询【工单处理】 + */ + @GetMapping("/mlist") + public TableDataInfo mlist(ServiceWorkOrdersBo bo, PageQuery pageQuery) { + return serviceWorkOrdersService.queryMobilePageList(bo, pageQuery); + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MServiceWorkOrdersController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MServiceWorkOrdersController.java index 4e83e415..233763f5 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MServiceWorkOrdersController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MServiceWorkOrdersController.java @@ -12,12 +12,16 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; import org.dromara.property.domain.bo.ServiceWorkOrdersBo; import org.dromara.property.domain.bo.mobile.MServiceWorkOrdersBo; +import org.dromara.property.domain.vo.ServiceWorkOrdersTypeVo; import org.dromara.property.domain.vo.ServiceWorkOrdersVo; import org.dromara.property.domain.vo.mobile.MServiceWorkOrdersVo; import org.dromara.property.service.IServiceWorkOrdersService; +import org.dromara.property.service.IServiceWorkOrdersTypeService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 【业务管理-工单处理】 * @@ -31,6 +35,7 @@ import org.springframework.web.bind.annotation.*; public class MServiceWorkOrdersController extends BaseController { private final IServiceWorkOrdersService serviceWorkOrdersService; + private final IServiceWorkOrdersTypeService serviceWorkOrdersTypeService; /** * 小程序新增【工单处理】 @@ -56,4 +61,11 @@ public class MServiceWorkOrdersController extends BaseController { public R edit(@Validated(EditGroup.class) @RequestBody ServiceWorkOrdersBo bo) { return toAjax(serviceWorkOrdersService.updateByBo(bo)); } + /** + * 查询【工单类型】树结构 + */ + @GetMapping("/typeTree") + public R> typeTrees() { + return R.ok(serviceWorkOrdersTypeService.typeTrees()); + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Clean.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Clean.java index ffc324d2..48f199b1 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Clean.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Clean.java @@ -37,6 +37,10 @@ public class Clean extends TenantEntity { * 计量单位 */ private String measure; + /** + * 保洁内容 + */ + private String cleanContent; /** * 保洁面积 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CleanOrderRecord.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CleanOrderRecord.java new file mode 100644 index 00000000..8002982c --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CleanOrderRecord.java @@ -0,0 +1,73 @@ +package org.dromara.property.domain; + +import lombok.experimental.Accessors; +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 保洁订单记录对象 clean_order_record + * + * @author mocheng + * @date 2025-09-09 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +@TableName("clean_order_record") +public class CleanOrderRecord extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 保洁订单id + */ + private Long cleanOrderId; + + /** + * 状态(1创建订单,2已接单,3处理中4已完成) + */ + private String status; + + /** + * 是否签到(1未签到2签到) + */ + private String isSign; + + /** + * 签到图片 + */ + private String signImg; + + /** + * 处理人 + */ + private Long handler; + + /** + * 发起人 + */ + private Long initiatorPeople; + + /** + * 评价文本 + */ + private String serviceEvaluaText; + + /** + * 是否异常(1正常2异常) + */ + private String isAbnormal; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanOrderRecordBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanOrderRecordBo.java new file mode 100644 index 00000000..501c3e01 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CleanOrderRecordBo.java @@ -0,0 +1,74 @@ +package org.dromara.property.domain.bo; + +import org.dromara.property.domain.CleanOrderRecord; +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.*; + +/** + * 保洁订单记录业务对象 clean_order_record + * + * @author mocheng + * @date 2025-09-09 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = CleanOrderRecord.class, reverseConvertGenerate = false) +public class CleanOrderRecordBo extends BaseEntity { + + /** + * id + */ + + private Long id; + + /** + * 保洁订单id + */ + + private Long cleanOrderId; + + /** + * 状态(1创建订单,2已接单,3处理中4已完成) + */ + + private String status; + + /** + * 是否签到(1未签到2签到) + */ + + private String isSign; + + /** + * 签到图片 + */ + private String signImg; + + /** + * 处理人 + */ + + private Long handler; + + /** + * 发起人 + */ + private Long initiatorPeople; + + /** + * 评价文本 + */ + private String serviceEvaluaText; + + /** + * 是否异常(1正常2异常) + */ + private String isAbnormal; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/cleanOrderBo/CleanBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/cleanOrderBo/CleanBo.java index ca4e407a..c50315f2 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/cleanOrderBo/CleanBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/cleanOrderBo/CleanBo.java @@ -50,7 +50,11 @@ public class CleanBo extends BaseEntity { // * 保洁面积 // */ // private Long area; - + /** + * 保洁内容 + */ + @NotBlank(message = "保洁内容不能为空", groups = { AddGroup.class, EditGroup.class }) + private String cleanContent; /** * 计算方式 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/cleanOrderBo/CleanOrderBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/cleanOrderBo/CleanOrderBo.java index 3727d0d7..dfd8aae9 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/cleanOrderBo/CleanOrderBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/cleanOrderBo/CleanOrderBo.java @@ -13,6 +13,7 @@ import jakarta.validation.constraints.*; import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.property.domain.bo.CleanOrderRecordBo; /** * 保洁订单业务对象 clean_order @@ -148,4 +149,7 @@ public class CleanOrderBo extends BaseEntity { private List cleanList; + private CleanOrderRecordBo cleanOrderRecord; + + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/BigScreen/TodayMeetCountVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/BigScreen/TodayMeetCountVo.java new file mode 100644 index 00000000..89f4b5a0 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/BigScreen/TodayMeetCountVo.java @@ -0,0 +1,19 @@ +package org.dromara.property.domain.vo.BigScreen; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Map; + +/** + * @author yuyongle + * @version 1.0 + * @description: 大屏类型会议室当天预约统计 + * @date 2025/9/9 10:17 + */ +@Data +@Accessors(chain = true) +public class TodayMeetCountVo { + private Integer meetCount; // 工单类型(如A, B, C, D) + private Integer timeQuantity; // 每个状态的数量 +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/BigScreen/TypeWorkOrderHistogramVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/BigScreen/TypeWorkOrderHistogramVo.java new file mode 100644 index 00000000..8568e993 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/BigScreen/TypeWorkOrderHistogramVo.java @@ -0,0 +1,20 @@ +package org.dromara.property.domain.vo.BigScreen; + + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Map; + +/** + * @author yuyongle + * @version 1.0 + * @description: 大屏类型工单状态柱状图 + * @date 2025/9/9 10:17 + */ +@Data +@Accessors(chain = true) +public class TypeWorkOrderHistogramVo { + private String type; // 工单类型(如A, B, C, D) + private Map statusCounts; // 每个状态的数量 +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CleanOrderRecordVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CleanOrderRecordVo.java new file mode 100644 index 00000000..1d096104 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CleanOrderRecordVo.java @@ -0,0 +1,96 @@ +package org.dromara.property.domain.vo; + +import org.dromara.property.domain.CleanOrderRecord; +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; + + + +/** + * 保洁订单记录视图对象 clean_order_record + * + * @author mocheng + * @date 2025-09-09 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = CleanOrderRecord.class) +public class CleanOrderRecordVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 保洁订单id + */ + @ExcelProperty(value = "保洁订单id") + private Long cleanOrderId; + /** + * 状态(1创建订单,2已接单,3处理中4已完成) + */ + @ExcelProperty(value = "状态(1创建订单,2已接单,3处理中4已完成)") + private String status; + + /** + * 是否签到(1未签到2签到) + */ + @ExcelProperty(value = "是否签到(1未签到2签到)") + private String isSign; + + /** + * 签到图片 + */ + @ExcelProperty(value = "签到图片") + private String signImg; + + /** + * 处理人 + */ + @ExcelProperty(value = "处理人") + private Long handler; + /** + * 处理人 + */ + @ExcelProperty(value = "处理人") + private String handlerText; + + /** + * 发起人 + */ + @ExcelProperty(value = "发起人") + private Long initiatorPeople; + + /** + * 发起人 + */ + @ExcelProperty(value = "发起人") + private String initiatorPeopleText; + + /** + * 评价文本 + */ + @ExcelProperty(value = "评价文本") + private String serviceEvaluaText; + + /** + * 是否异常(1正常2异常) + */ + @ExcelProperty(value = "是否异常(1正常2异常)") + private String isAbnormal; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/cleanOrderVo/CleanOrderVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/cleanOrderVo/CleanOrderVo.java index c9e1762b..d03d059b 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/cleanOrderVo/CleanOrderVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/cleanOrderVo/CleanOrderVo.java @@ -6,7 +6,9 @@ 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.CleanOrderRecord; import org.dromara.property.domain.CleanRelation; +import org.dromara.property.domain.vo.CleanOrderRecordVo; import java.io.Serial; import java.io.Serializable; @@ -153,6 +155,7 @@ public class CleanOrderVo implements Serializable { private List cleanList; private List relationList; + private List recordVoList; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/cleanOrderVo/CleanVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/cleanOrderVo/CleanVo.java index ac360e89..5c327911 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/cleanOrderVo/CleanVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/cleanOrderVo/CleanVo.java @@ -53,7 +53,10 @@ public class CleanVo implements Serializable { */ @ExcelProperty(value = "计算方式") private String method; - + /** + * 保洁内容 + */ + private String cleanContent; /** * 单价 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CleanOrderRecordMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CleanOrderRecordMapper.java new file mode 100644 index 00000000..04de5175 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/CleanOrderRecordMapper.java @@ -0,0 +1,15 @@ +package org.dromara.property.mapper; + +import org.dromara.property.domain.CleanOrderRecord; +import org.dromara.property.domain.vo.CleanOrderRecordVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 保洁订单记录Mapper接口 + * + * @author mocheng + * @date 2025-09-09 + */ +public interface CleanOrderRecordMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ICleanOrderRecordService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ICleanOrderRecordService.java new file mode 100644 index 00000000..ee0f6329 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ICleanOrderRecordService.java @@ -0,0 +1,69 @@ +package org.dromara.property.service; + +import org.dromara.property.domain.CleanOrderRecord; +import org.dromara.property.domain.vo.CleanOrderRecordVo; +import org.dromara.property.domain.bo.CleanOrderRecordBo; +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-09 + */ +public interface ICleanOrderRecordService { + + /** + * 查询保洁订单记录 + * + * @param id 主键 + * @return 保洁订单记录 + */ + CleanOrderRecordVo queryById(Long id); + + /** + * 分页查询保洁订单记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 保洁订单记录分页列表 + */ + TableDataInfo queryPageList(CleanOrderRecordBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的保洁订单记录列表 + * + * @param bo 查询条件 + * @return 保洁订单记录列表 + */ + List queryList(CleanOrderRecordBo bo); + + /** + * 新增保洁订单记录 + * + * @param bo 保洁订单记录 + * @return 是否新增成功 + */ + Boolean insertByBo(CleanOrderRecordBo bo); + + /** + * 修改保洁订单记录 + * + * @param bo 保洁订单记录 + * @return 是否修改成功 + */ + Boolean updateByBo(CleanOrderRecordBo bo); + + /** + * 校验并批量删除保洁订单记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IMeetBookingService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IMeetBookingService.java index 3b018da5..5cb439ee 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IMeetBookingService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IMeetBookingService.java @@ -1,6 +1,7 @@ package org.dromara.property.service; import org.dromara.property.domain.MeetBooking; +import org.dromara.property.domain.vo.BigScreen.TodayMeetCountVo; import org.dromara.property.domain.vo.MeetBookingAppointmentVo; import org.dromara.property.domain.vo.MeetBookingDetailVo; import org.dromara.property.domain.vo.MeetBookingVo; @@ -85,5 +86,11 @@ public interface IMeetBookingService { * @return */ List> getMeetBooking(String type); + //APP端接口 + /** + * + * @return + */ + TodayMeetCountVo todayMeetCount(); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java index ca0dcaf7..e7053b9a 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java @@ -5,6 +5,8 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.property.domain.bo.ServiceWorkOrdersBo; import org.dromara.property.domain.bo.mobile.MServiceWorkOrdersBo; +import org.dromara.property.domain.vo.BigScreen.TodayMeetCountVo; +import org.dromara.property.domain.vo.BigScreen.TypeWorkOrderHistogramVo; import org.dromara.property.domain.vo.ServiceWorkOrderAnalysisVo; import org.dromara.property.domain.vo.ServiceWorkOrdersInfoVo; import org.dromara.property.domain.vo.ServiceWorkOrdersVo; @@ -74,16 +76,17 @@ public interface IServiceWorkOrdersService { /** * 工单服务看板 + * * @return */ ServiceWorkOrderAnalysisVo counts(); - //小程序端新增 /** * 新增工单 + * * @param bo * @return */ @@ -91,10 +94,12 @@ public interface IServiceWorkOrdersService { /** * 查询工单处理人枚举 + * * @param type * @return */ List> getServiceWorkOrdersHandler(String type); + /** * 分页查询【工单处理】列表 * @@ -119,4 +124,12 @@ public interface IServiceWorkOrdersService { * @return list */ List queryMyOrderByXcx(); + + //大屏接口 + + /** + * 大屏工单柱状图 + */ + List typeWorkOrderHistogram(); + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersTypeService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersTypeService.java index a578ced8..92b16f5a 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersTypeService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersTypeService.java @@ -71,4 +71,10 @@ public interface IServiceWorkOrdersTypeService { * @return 工单类型树结构 */ List typeTree(); + + /** + * 查询【工单类型】树结构 + * @return 工单类型树结构 + */ + List typeTrees(); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/cleanOrderService/ICleanOrderService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/cleanOrderService/ICleanOrderService.java index 6ca20505..20601470 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/cleanOrderService/ICleanOrderService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/cleanOrderService/ICleanOrderService.java @@ -1,5 +1,6 @@ package org.dromara.property.service.cleanOrderService; +import org.dromara.property.domain.bo.CleanOrderRecordBo; import org.dromara.property.domain.vo.cleanOrderVo.CleanOrderVo; import org.dromara.property.domain.bo.cleanOrderBo.CleanOrderBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -65,4 +66,11 @@ public interface ICleanOrderService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 指派保洁订单 + * @param bo + * @return + */ + int assign(CleanOrderBo bo); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CleanOrderRecordServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CleanOrderRecordServiceImpl.java new file mode 100644 index 00000000..c2e33a8d --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CleanOrderRecordServiceImpl.java @@ -0,0 +1,138 @@ +package org.dromara.property.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.dromara.property.domain.bo.CleanOrderRecordBo; +import org.dromara.property.domain.vo.CleanOrderRecordVo; +import org.dromara.property.domain.CleanOrderRecord; +import org.dromara.property.mapper.CleanOrderRecordMapper; +import org.dromara.property.service.ICleanOrderRecordService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 保洁订单记录Service业务层处理 + * + * @author mocheng + * @date 2025-09-09 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class CleanOrderRecordServiceImpl implements ICleanOrderRecordService { + + private final CleanOrderRecordMapper baseMapper; + + /** + * 查询保洁订单记录 + * + * @param id 主键 + * @return 保洁订单记录 + */ + @Override + public CleanOrderRecordVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询保洁订单记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 保洁订单记录分页列表 + */ + @Override + public TableDataInfo queryPageList(CleanOrderRecordBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的保洁订单记录列表 + * + * @param bo 查询条件 + * @return 保洁订单记录列表 + */ + @Override + public List queryList(CleanOrderRecordBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(CleanOrderRecordBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(CleanOrderRecord::getId); + lqw.eq(bo.getCleanOrderId() != null, CleanOrderRecord::getCleanOrderId, bo.getCleanOrderId()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), CleanOrderRecord::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getIsSign()), CleanOrderRecord::getIsSign, bo.getIsSign()); + lqw.eq(StringUtils.isNotBlank(bo.getSignImg()), CleanOrderRecord::getSignImg, bo.getSignImg()); + lqw.eq(bo.getHandler() != null, CleanOrderRecord::getHandler, bo.getHandler()); + lqw.eq(bo.getInitiatorPeople() != null, CleanOrderRecord::getInitiatorPeople, bo.getInitiatorPeople()); + lqw.eq(StringUtils.isNotBlank(bo.getIsAbnormal()), CleanOrderRecord::getIsAbnormal, bo.getIsAbnormal()); + return lqw; + } + + /** + * 新增保洁订单记录 + * + * @param bo 保洁订单记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(CleanOrderRecordBo bo) { + CleanOrderRecord add = MapstructUtils.convert(bo, CleanOrderRecord.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改保洁订单记录 + * + * @param bo 保洁订单记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(CleanOrderRecordBo bo) { + CleanOrderRecord update = MapstructUtils.convert(bo, CleanOrderRecord.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(CleanOrderRecord entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除保洁订单记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetBookingServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetBookingServiceImpl.java index 40478219..d3db408c 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetBookingServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetBookingServiceImpl.java @@ -14,10 +14,12 @@ 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.Meet; import org.dromara.property.domain.MeetAttachOrder; import org.dromara.property.domain.MeetBooking; import org.dromara.property.domain.bo.MeetBookingBo; import org.dromara.property.domain.vo.*; +import org.dromara.property.domain.vo.BigScreen.TodayMeetCountVo; import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; import org.dromara.property.domain.vo.residentVo.ResidentUnitVo; import org.dromara.property.mapper.*; @@ -30,6 +32,7 @@ import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -69,7 +72,7 @@ public class MeetBookingServiceImpl implements IMeetBookingService { //RemoteUserVo userInfo = remoteUserService.getUserInfoById(Long.valueOf(meetBookingVo.getPerson())); ResidentPersonVo residentPersonVo = residentPersonMapper.selectVoById(Long.valueOf(meetBookingVo.getPerson())); meetBookingDetailVo.setPersonName(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getUserName() : null); - meetBookingDetailVo.setPhone(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getPhone(): null); + meetBookingDetailVo.setPhone(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getPhone() : null); ResidentUnitVo residentUnitVo = residentUnitMapper.selectVoById(Long.valueOf(meetBookingVo.getUnit())); meetBookingDetailVo.setUnitName(ObjectUtil.isNotNull(residentUnitVo) ? residentUnitVo.getName() : null); return meetBookingDetailVo; @@ -87,26 +90,26 @@ public class MeetBookingServiceImpl implements IMeetBookingService { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); List meetBookingVoList = new ArrayList<>(); - if(CollUtil.isNotEmpty(result.getRecords())){ - List residentUnitVolist = residentUnitMapper.selectVoList(); - List userId = result.getRecords().stream().map(vo -> vo.getPerson()).distinct().map(Long::parseLong).collect(Collectors.toList()); - List remoteUserVos = residentPersonMapper.selectVoByIds(userId); - // List remoteUserVos = remoteUserService.selectListByIds(userId); + if (CollUtil.isNotEmpty(result.getRecords())) { + List residentUnitVolist = residentUnitMapper.selectVoList(); + List userId = result.getRecords().stream().map(vo -> vo.getPerson()).distinct().map(Long::parseLong).collect(Collectors.toList()); + List remoteUserVos = residentPersonMapper.selectVoByIds(userId); + // List remoteUserVos = remoteUserService.selectListByIds(userId); - result.getRecords().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(remoteUserVos)) { - ResidentPersonVo residentPersonVo = remoteUserVos.stream() - .filter(vo -> vo.getUserId() != null && String.valueOf(vo.getUserId()).equals(s.getPerson())).findFirst().orElse(null); - s.setPersonName(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getUserName() : null); - s.setPhone(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getPhone() : null); - } - meetBookingVoList.add(s); - }); + result.getRecords().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(remoteUserVos)) { + ResidentPersonVo residentPersonVo = remoteUserVos.stream() + .filter(vo -> vo.getUserId() != null && String.valueOf(vo.getUserId()).equals(s.getPerson())).findFirst().orElse(null); + s.setPersonName(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getUserName() : null); + s.setPhone(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getPhone() : null); + } + meetBookingVoList.add(s); + }); } return TableDataInfo.build(new Page().setRecords(meetBookingVoList).setTotal(result.getTotal())); } @@ -124,7 +127,7 @@ public class MeetBookingServiceImpl implements IMeetBookingService { LocalDateTime startOfDay = date.atStartOfDay(); LocalDateTime endOfDay = date.atTime(LocalTime.MAX); meetBookingLambdaQueryWrapper - .eq(MeetBooking::getState,2) + .eq(MeetBooking::getState, 2) .le(MeetBooking::getScheduledStarttime, endOfDay) .ge(MeetBooking::getScheduledEndtime, startOfDay); List meetBookings = baseMapper.selectList(meetBookingLambdaQueryWrapper); @@ -135,14 +138,14 @@ public class MeetBookingServiceImpl implements IMeetBookingService { SimpleDateFormat df = new SimpleDateFormat("HH"); List residentUnitVolist = residentUnitMapper.selectVoList(); List userId = meetBookingAppointmentVoList.stream().map(vo -> vo.getPerson()).distinct().map(Long::parseLong).collect(Collectors.toList()); - // List remoteUserVos = remoteUserService.selectListByIds(userId); + // List remoteUserVos = remoteUserService.selectListByIds(userId); List remoteUserVos = residentPersonMapper.selectVoByIds(userId); meetBookingAppointmentVoList.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); + s.setUnitName(ObjectUtil.isNotEmpty(residentUnitVo) ? residentUnitVo.getName() : null); } if (CollUtil.isNotEmpty(remoteUserVos)) { ResidentPersonVo residentPersonVo = remoteUserVos.stream() @@ -184,7 +187,7 @@ public class MeetBookingServiceImpl implements IMeetBookingService { // 构建查询条件 LambdaQueryWrapper bookingLambdaQueryWrapper = new LambdaQueryWrapper<>(); bookingLambdaQueryWrapper.eq(MeetBooking::getMeetId, meetId) - .eq(MeetBooking::getState,2) + .eq(MeetBooking::getState, 2) .ge(MeetBooking::getScheduledStarttime, startOfWeek) .le(MeetBooking::getScheduledEndtime, endOfWeek); List meetBookingVoList = baseMapper.selectVoList(bookingLambdaQueryWrapper); @@ -197,13 +200,13 @@ public class MeetBookingServiceImpl implements IMeetBookingService { SimpleDateFormat df = new SimpleDateFormat("HH"); List residentUnitVolist = residentUnitMapper.selectVoList(); List userId = meetBookingWeekVoList.stream().map(vo -> vo.getPerson()).distinct().map(Long::parseLong).collect(Collectors.toList()); - // List remoteUserVos = remoteUserService.selectListByIds(userId); + // List remoteUserVos = remoteUserService.selectListByIds(userId); List remoteUserVos = residentPersonMapper.selectVoByIds(userId); meetBookingWeekVoList.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); + s.setUnitName(ObjectUtil.isNotEmpty(residentUnitVo) ? residentUnitVo.getName() : null); } if (CollUtil.isNotEmpty(remoteUserVos)) { ResidentPersonVo residentPersonVo = remoteUserVos.stream() @@ -322,9 +325,29 @@ public class MeetBookingServiceImpl implements IMeetBookingService { }; } + public List getList() { LambdaQueryWrapper meetQueryWrapper = new LambdaQueryWrapper<>(); return baseMapper.selectList(meetQueryWrapper); } + + @Override + public TodayMeetCountVo todayMeetCount() { + Long meetCount = meetMapper.selectCount(null); + // 获取今日开始和结束时间 + LocalDate today = LocalDate.now(); + + // 查询今日预约 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper + .le(MeetBooking::getScheduledStarttime, today) + .ge(MeetBooking::getScheduledEndtime, today); + List todayBookings = baseMapper.selectList(queryWrapper); + TodayMeetCountVo todayMeetCountVo = new TodayMeetCountVo(); + todayMeetCountVo.setTimeQuantity(todayBookings.size()); + todayMeetCountVo.setMeetCount(Integer.valueOf(Math.toIntExact(meetCount))); + return todayMeetCountVo; + } + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java index e54e1b34..c1d12144 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java @@ -27,6 +27,8 @@ 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.BigScreen.TodayMeetCountVo; +import org.dromara.property.domain.vo.BigScreen.TypeWorkOrderHistogramVo; import org.dromara.property.domain.vo.mobile.MServiceWorkOrdersRecordVo; import org.dromara.property.domain.vo.mobile.MServiceWorkOrdersVo; import org.dromara.property.mapper.ResidentPersonMapper; @@ -762,4 +764,89 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { return baseMapper.selectVoList(qw); } + //大屏接口 + + /** + * 大屏工单柱状图 + */ + @Override + public List typeWorkOrderHistogram() { + // 查询工单类型 + List typeVoList = serviceWorkOrdersTypeService.typeTree(); + + // 递归收集工单类型ID并查询工单数量按状态区分 + List result = new ArrayList<>(); + for (ServiceWorkOrdersTypeVo typeVo : typeVoList) { + Map statusCounts = getStatusCounts(typeVo); + result.add(new TypeWorkOrderHistogramVo() + .setType(typeVo.getOrderTypeName()) + .setStatusCounts(statusCounts)); + } + return result; + } + + + private Map getStatusCounts(ServiceWorkOrdersTypeVo typeVo) { + List allTypeIds = getAllTypeIds(typeVo); + List workOrders = getWorkOrdersByTypeIds(allTypeIds); + + Map statusCounts = new HashMap<>(); + int pendingCount = 0; + int dispatchCount = 0; + int processingCount = 0; + int completedCount = 0; + + for (ServiceWorkOrders order : workOrders) { + String status = order.getStatus(); + switch (status) { + case "0": // 待派单 + pendingCount++; + break; + case "1": // 已派单 + case "2": + dispatchCount++; + break; + case "3": // 处理中 + processingCount++; + case "4": // 已关闭 + completedCount++; + break; + default: + // 处理其他状态或记录日志 + break; + } + } + + statusCounts.put(WorkOrderStatusEnum.CREATE_ORDER.getName(), pendingCount); + statusCounts.put(WorkOrderStatusEnum.DISPATCHED.getName(), dispatchCount); + statusCounts.put(WorkOrderStatusEnum.IN_HAND.getName(), processingCount); + statusCounts.put(WorkOrderStatusEnum.DONE.getName(), completedCount); + statusCounts.put("已完成", completedCount); + + return statusCounts; + } + + + private List getAllTypeIds(ServiceWorkOrdersTypeVo typeVo) { + List typeIds = new ArrayList<>(); + collectTypeIds(typeVo, typeIds); + return typeIds; + } + + private void collectTypeIds(ServiceWorkOrdersTypeVo typeVo, List typeIds) { + typeIds.add(typeVo.getId()); + if (typeVo.getChildren() != null) { + for (ServiceWorkOrdersTypeVo child : typeVo.getChildren()) { + collectTypeIds(child, typeIds); + } + } + } + + private List getWorkOrdersByTypeIds(List typeIds) { + // 假设这里有一个方法可以从数据库或其他数据源获取工单列表 + return baseMapper.selectList( + new LambdaQueryWrapper() + .in(ServiceWorkOrders::getType, typeIds) + ); + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java index 0e487feb..f425144e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java @@ -203,4 +203,16 @@ public class ServiceWorkOrdersTypeServiceImpl implements IServiceWorkOrdersTypeS } return tree; } + + //APP端 + /** + * 查询【工单类型】树结构 + * + * @return 工单类型树结构 + */ + @Override + public List typeTrees() { + List list = baseMapper.selectVoList(); + return buildTree(list, null); + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/cleanOrderImpl/CleanOrderServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/cleanOrderImpl/CleanOrderServiceImpl.java index 2a03af34..c9443b09 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/cleanOrderImpl/CleanOrderServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/cleanOrderImpl/CleanOrderServiceImpl.java @@ -1,24 +1,35 @@ package org.dromara.property.service.impl.cleanOrderImpl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; 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.PageQuery; 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.bo.CleanOrderRecordBo; import org.dromara.property.domain.bo.cleanOrderBo.CleanOrderBo; +import org.dromara.property.domain.enums.WorkOrderStatusEnum; +import org.dromara.property.domain.vo.CleanOrderRecordVo; import org.dromara.property.domain.vo.cleanOrderVo.CleanOrderVo; +import org.dromara.property.mapper.CleanOrderRecordMapper; import org.dromara.property.mapper.TbRoomMapper; import org.dromara.property.mapper.cleanOrderMapper.CleanMapper; import org.dromara.property.mapper.cleanOrderMapper.CleanOrderMapper; import org.dromara.property.mapper.cleanOrderMapper.CleanRelationMapper; import org.dromara.property.mapper.cleanOrderMapper.CleanserverOrderMapper; import org.dromara.property.service.cleanOrderService.ICleanOrderService; +import org.dromara.system.api.RemoteUserService; +import org.dromara.system.api.domain.vo.RemoteUserVo; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -28,6 +39,8 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import static org.springframework.beans.BeanUtils.copyProperties; + /** * 保洁订单Service业务层处理 * @@ -40,12 +53,15 @@ import java.util.stream.Collectors; public class CleanOrderServiceImpl implements ICleanOrderService { private final CleanOrderMapper baseMapper; + private final CleanOrderRecordMapper cleanOrderRecordMapper; private final CleanserverOrderMapper cleanserverOrderMapper; private final CleanMapper cleanMapper; private final CleanRelationMapper cleanRelationMapper; private final TbRoomMapper roomMapper; + @DubboReference + private RemoteUserService remoteUserService; //NOTUNBOOKING:未退订 BOOKING:已退订 private final Integer NOTUNBOOKING = 0; @@ -79,6 +95,25 @@ public class CleanOrderServiceImpl implements ICleanOrderService { CleanOrderVo cleanOrderVo = MapstructUtils.convert(cleanOrder, CleanOrderVo.class); cleanOrderVo.setCleanList(cleanList); cleanOrderVo.setRelationList(cleanRelationList); + //查询订单记录 + List cleanOrderRecordVos = cleanOrderRecordMapper.selectVoList(Wrappers.lambdaQuery().eq(CleanOrderRecord::getCleanOrderId, id)); + if(CollUtil.isNotEmpty(cleanOrderRecordVos)){ + cleanOrderRecordVos.stream().forEach(item -> { + //查询指派人名称 + if(ObjectUtil.isNotEmpty(item.getHandler())){ + RemoteUserVo userInfo = remoteUserService.getUserInfoById(item.getHandler()); + item.setHandlerText(userInfo.getNickName()); + } + //查询发起人名称 + if(ObjectUtil.isNotEmpty(item.getInitiatorPeople())){ + RemoteUserVo userInfo = remoteUserService.getUserInfoById(item.getInitiatorPeople()); + item.setInitiatorPeopleText(userInfo.getNickName()); + } + + }); + cleanOrderVo.setRecordVoList(cleanOrderRecordVos); + } + return cleanOrderVo; } @@ -156,12 +191,15 @@ public class CleanOrderServiceImpl implements ICleanOrderService { //1.向clean_order表中插入数据 // CleanOrder add = MapstructUtils.convert(bo, CleanOrder.class); CleanOrder add = new CleanOrder(); - validEntityBeforeSave(add); - BeanUtils.copyProperties(bo, add); + copyProperties(bo, add); add.setStarTime(bo.getStarTime()); add.setEndTime(bo.getEndTime()); add.setIsUnbooking(NOTUNBOOKING); boolean flag = baseMapper.insert(add) > 0; + if (flag){ + bo.setId(add.getId()); + validEntityBeforeSave(bo); + } //取出clean_order表中的所有clean数据 List cleanList = bo.getCleanList(); @@ -206,19 +244,31 @@ public class CleanOrderServiceImpl implements ICleanOrderService { * @return 是否修改成功 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean updateByBo(CleanOrderBo bo) { CleanOrder update = MapstructUtils.convert(bo, CleanOrder.class); - validEntityBeforeSave(update); + // validEntityBeforeSave(update); update.setStarTime(bo.getStarTime()); update.setEndTime(bo.getStarTime()); return baseMapper.updateById(update) > 0; } /** - * 保存前的数据校验 + * 保存后的数据校验 */ - private void validEntityBeforeSave(CleanOrder entity) { + private void validEntityBeforeSave(CleanOrderBo bo) { + //当前登录用户 + Long userId = LoginHelper.getUserId(); //TODO 做一些数据校验,如唯一约束 + cleanOrderRecordMapper.insert( + new CleanOrderRecord() + .setCleanOrderId(bo.getId()) + .setStatus("1") + .setIsSign("1") + .setInitiatorPeople(userId) + .setServiceEvaluaText(bo.getServiceEvaluaText()) + .setIsAbnormal("1") + ); } /** @@ -236,4 +286,16 @@ public class CleanOrderServiceImpl implements ICleanOrderService { //todo:应该删除中间表中的数据 return baseMapper.deleteByIds(ids) > 0; } + /** + * 指派保洁订单 + * @param bo + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int assign(CleanOrderBo bo) { + CleanOrderRecord cleanOrderRecord= BeanUtil.copyProperties(bo.getCleanOrderRecord(), CleanOrderRecord.class); + cleanOrderRecord.setStatus("2"); + return cleanOrderRecordMapper.insert(cleanOrderRecord); + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentUnitServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentUnitServiceImpl.java index f2a2e460..dc8453e3 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentUnitServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentUnitServiceImpl.java @@ -62,7 +62,7 @@ public class ResidentUnitServiceImpl implements IResidentUnitService { public ResidentUnitVo queryById(Long id){ ResidentUnitVo residentUnitVo = baseMapper.selectVoById(id); //获取入驻位置详情 - if(StringUtils.isNotBlank(residentUnitVo.getLocation())){ + if(ObjectUtil.isNotEmpty(residentUnitVo)){ // 修改后的代码 List idList = Arrays.stream(residentUnitVo.getLocation().split(",")) .map(String::trim) @@ -75,9 +75,9 @@ public class ResidentUnitServiceImpl implements IResidentUnitService { String locationDetail = String.join(",", roomNames); residentUnitVo.setLocationDetail(locationDetail); } + Long num = personService.queryPersonCount(residentUnitVo.getId()); + residentUnitVo.setNumber(num); } - Long num = personService.queryPersonCount(residentUnitVo.getId()); - residentUnitVo.setNumber(num); return residentUnitVo; } diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java index c7daa07d..66ac58be 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java @@ -39,7 +39,7 @@ public class GenController extends BaseController { /** * 查询代码生成列表 */ - @SaCheckPermission("tool:gen:list") + //@SaCheckPermission("tool:gen:list") @GetMapping("/list") public TableDataInfo genList(GenTable genTable, PageQuery pageQuery) { return genTableService.selectPageGenTableList(genTable, pageQuery); @@ -50,7 +50,7 @@ public class GenController extends BaseController { * * @param tableId 表ID */ - @SaCheckPermission("tool:gen:query") + //@SaCheckPermission("tool:gen:query") @GetMapping(value = "/{tableId}") public R> getInfo(@PathVariable Long tableId) { GenTable table = genTableService.selectGenTableById(tableId); @@ -66,7 +66,7 @@ public class GenController extends BaseController { /** * 查询数据库列表 */ - @SaCheckPermission("tool:gen:list") + //@SaCheckPermission("tool:gen:list") @GetMapping("/db/list") public TableDataInfo dataList(GenTable genTable, PageQuery pageQuery) { return genTableService.selectPageDbTableList(genTable, pageQuery); @@ -77,7 +77,7 @@ public class GenController extends BaseController { * * @param tableId 表ID */ - @SaCheckPermission("tool:gen:list") + //@SaCheckPermission("tool:gen:list") @GetMapping(value = "/column/{tableId}") public TableDataInfo columnList(@PathVariable("tableId") Long tableId) { TableDataInfo dataInfo = new TableDataInfo<>(); @@ -92,7 +92,7 @@ public class GenController extends BaseController { * * @param tables 表名串 */ - @SaCheckPermission("tool:gen:import") + //@SaCheckPermission("tool:gen:import") @Log(title = "代码生成", businessType = BusinessType.IMPORT) @PostMapping("/importTable") public R importTableSave(String tables, String dataName) { @@ -106,7 +106,7 @@ public class GenController extends BaseController { /** * 修改保存代码生成业务 */ - @SaCheckPermission("tool:gen:edit") + //@SaCheckPermission("tool:gen:edit") @Log(title = "代码生成", businessType = BusinessType.UPDATE) @PutMapping public R editSave(@Validated @RequestBody GenTable genTable) { @@ -120,7 +120,7 @@ public class GenController extends BaseController { * * @param tableIds 表ID串 */ - @SaCheckPermission("tool:gen:remove") + //@SaCheckPermission("tool:gen:remove") @Log(title = "代码生成", businessType = BusinessType.DELETE) @DeleteMapping("/{tableIds}") public R remove(@PathVariable Long[] tableIds) { @@ -133,7 +133,7 @@ public class GenController extends BaseController { * * @param tableId 表ID */ - @SaCheckPermission("tool:gen:preview") + //@SaCheckPermission("tool:gen:preview") @GetMapping("/preview/{tableId}") public R> preview(@PathVariable("tableId") Long tableId) throws IOException { Map dataMap = genTableService.previewCode(tableId); @@ -145,7 +145,7 @@ public class GenController extends BaseController { * * @param tableId 表ID */ - @SaCheckPermission("tool:gen:code") + //@SaCheckPermission("tool:gen:code") @Log(title = "代码生成", businessType = BusinessType.GENCODE) @GetMapping("/download/{tableId}") public void download(HttpServletResponse response, @PathVariable("tableId") Long tableId) throws IOException { @@ -158,7 +158,7 @@ public class GenController extends BaseController { * * @param tableId 表ID */ - @SaCheckPermission("tool:gen:code") + //@SaCheckPermission("tool:gen:code") @Log(title = "代码生成", businessType = BusinessType.GENCODE) @GetMapping("/genCode/{tableId}") public R genCode(@PathVariable("tableId") Long tableId) { @@ -171,7 +171,7 @@ public class GenController extends BaseController { * * @param tableId 表ID */ - @SaCheckPermission("tool:gen:edit") + //@SaCheckPermission("tool:gen:edit") @Log(title = "代码生成", businessType = BusinessType.UPDATE) @GetMapping("/synchDb/{tableId}") public R synchDb(@PathVariable("tableId") Long tableId) { @@ -184,7 +184,7 @@ public class GenController extends BaseController { * * @param tableIdStr 表ID串 */ - @SaCheckPermission("tool:gen:code") + //@SaCheckPermission("tool:gen:code") @Log(title = "代码生成", businessType = BusinessType.GENCODE) @GetMapping("/batchGenCode") public void batchGenCode(HttpServletResponse response, String tableIdStr) throws IOException { @@ -209,7 +209,7 @@ public class GenController extends BaseController { /** * 查询数据源名称列表 */ - @SaCheckPermission("tool:gen:list") + //@SaCheckPermission("tool:gen:list") @GetMapping(value = "/getDataNames") public R getCurrentDataSourceNameList(){ return R.ok(DataBaseHelper.getDataSourceNameList());