From 2816c22a4d2bc62b6153cfb330e07c125f947ef7 Mon Sep 17 00:00:00 2001 From: 15683799673 Date: Tue, 9 Sep 2025 05:41:23 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E9=80=9A=E9=81=93?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=80=9A=E9=81=93=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/sis/domain/vo/SisDeviceChannelVo.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceChannelVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceChannelVo.java index 14ba7194..95f32d2d 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceChannelVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceChannelVo.java @@ -119,4 +119,9 @@ public class SisDeviceChannelVo implements Serializable { * nvr 通道编号 */ private String nvrChannelNo; + + /** + * 通道状态.0-离线;1-在线 + */ + private Integer channelState; } 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 02/14] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BF=9D=E6=B4=81?= =?UTF-8?q?=E8=AE=A2=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()); From 1cc77bdedcf715e3d0cae41651d0467c0484d219 Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Tue, 9 Sep 2025 18:15:40 +0800 Subject: [PATCH 03/14] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BF=9D=E6=B4=81?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cleanOrderImpl/CleanOrderServiceImpl.java | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) 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 c9443b09..884f6dba 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 @@ -95,24 +95,24 @@ 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); - } +// //查询订单记录 +// 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; @@ -198,7 +198,7 @@ public class CleanOrderServiceImpl implements ICleanOrderService { boolean flag = baseMapper.insert(add) > 0; if (flag){ bo.setId(add.getId()); - validEntityBeforeSave(bo); + // validEntityBeforeSave(bo); } //取出clean_order表中的所有clean数据 From f91333de3a11730f43c10d18b61887d7c2acd137 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Tue, 9 Sep 2025 18:16:53 +0800 Subject: [PATCH 04/14] =?UTF-8?q?-=20=E4=BB=AA=E8=A1=A8=E3=80=81=E9=97=A8?= =?UTF-8?q?=E7=A6=81=E3=80=81=E6=91=84=E5=83=8F=E5=A4=B4=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=20-=20=E4=BB=AA=E8=A1=A8=E5=B1=82=E7=BA=A7?= =?UTF-8?q?=E6=A0=91=E6=98=BE=E7=A4=BA=E6=AF=8F=E5=B1=82=E4=BB=AA=E8=A1=A8?= =?UTF-8?q?=E6=95=B0=20-=20=E4=BB=AA=E8=A1=A8=E6=A6=82=E5=86=B5=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E6=8E=92=E5=BA=8F=20-=20=E5=B0=8F=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E7=AB=AF=E6=8E=A5=E5=8F=A3=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/service/SaPermissionImpl.java | 1 + .../TbMeterInfoController.java | 25 ++++++++ .../xcx/XServiceWorkOrdersController.java | 10 +++ .../controller/xcx/XSystemController.java | 41 ++++++++++++ .../domain/vo/ServiceWorkOrdersRecordVo.java | 4 ++ .../IServiceWorkOrdersRecordService.java | 22 +++++++ .../service/IServiceWorkOrdersService.java | 12 +++- .../impl/ServiceWorkOrdersRecordImpl.java | 39 +++++++++++ .../impl/ServiceWorkOrdersServiceImpl.java | 54 +++++++++++++++- .../TbMeterInfoServiceImpl.java | 64 +++++++++++++++++-- .../TbMeterRecordServiceImpl.java | 11 ++++ ...sitorController.java => E8Controller.java} | 27 +++++++- .../controller/SisDeviceManageController.java | 16 ++++- .../sis/domain/vo/SisDeviceManageVo.java | 5 ++ .../door/res/AuthDoorDeviceFindRes.java | 5 ++ 15 files changed, 323 insertions(+), 13 deletions(-) create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XSystemController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersRecordService.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersRecordImpl.java rename ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/{SisVisitorController.java => E8Controller.java} (77%) diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java index 4d169a21..1e212643 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java @@ -54,6 +54,7 @@ public class SaPermissionImpl implements StpInterface { "xcx:unit:query", // 工单管理 "xcx:workOrders:add", + "xcx:workOrders:edit", "xcx:workOrders:query", // 工单类型管理 "xcx:workOrdersType:query", diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java index 716e3bfa..14de09d4 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java @@ -1,6 +1,8 @@ package org.dromara.property.controller.smartDevicesController; +import java.util.HashMap; import java.util.List; +import java.util.Map; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; @@ -131,4 +133,27 @@ public class TbMeterInfoController extends BaseController { return R.ok(); } + /** + * 获取水/电/表状态统计 + * + * @return map + */ + @GetMapping("/statusCount") + public R> getMeterStatus() { + List voList = tbMeterInfoService.queryList(new TbMeterInfoBo()); + Map map = new HashMap<>(); + + Map powerMeter = new HashMap<>(); + powerMeter.put("on", voList.stream().filter(o -> o.getMeterType() == 1 && o.getCommunicationState() == 1).count()); + powerMeter.put("off", voList.stream().filter(o -> o.getMeterType() == 1 && o.getCommunicationState() == 0).count()); + + Map waterMeter = new HashMap<>(); + waterMeter.put("on", voList.stream().filter(o -> o.getMeterType() == 2 && o.getCommunicationState() == 1).count()); + waterMeter.put("off", voList.stream().filter(o -> o.getMeterType() == 2 && o.getCommunicationState() == 0).count()); + + map.put("water", waterMeter); + map.put("power", powerMeter); + return R.ok(map); + } + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XServiceWorkOrdersController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XServiceWorkOrdersController.java index b6e41568..e372351d 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XServiceWorkOrdersController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XServiceWorkOrdersController.java @@ -39,6 +39,16 @@ public class XServiceWorkOrdersController extends BaseController { return toAjax(serviceWorkOrdersService.insertOrderByXcx(bo)); } + /** + * 小程序新增【工单处理】 + */ + @PutMapping() + @SaCheckPermission("xcx:workOrders:edit") + @Log(title = "【小程序新增工单处理】", businessType = BusinessType.UPDATE) + public R edit(@Validated(AddGroup.class) @RequestBody ServiceWorkOrdersBo bo) { + return toAjax(serviceWorkOrdersService.updateOrderByXcx(bo)); + } + /** * 小程序查询【工单处理】 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XSystemController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XSystemController.java new file mode 100644 index 00000000..86c45e66 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XSystemController.java @@ -0,0 +1,41 @@ +package org.dromara.property.controller.xcx; + +import cn.hutool.core.util.ObjectUtil; +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.common.core.domain.R; +import org.dromara.system.api.RemoteDictService; +import org.dromara.system.api.domain.vo.RemoteDictDataVo; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author lsm + * @apiNote XSystemController + * @since 2025/9/9 + */ +@RestController +@RequestMapping("/xcx/system") +public class XSystemController { + + @DubboReference + private RemoteDictService RemoteDictDataVo; + + /** + * 根据字典类型查询字典数据信息 + * + * @param dictType 字典类型 + */ + @GetMapping(value = "/type/{dictType}") + public R> dictType(@PathVariable String dictType) { + List data = RemoteDictDataVo.selectDictDataByType(dictType); + if (ObjectUtil.isNull(data)) { + data = new ArrayList<>(); + } + return R.ok(data); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersRecordVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersRecordVo.java index 8471f476..5e6818f1 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersRecordVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersRecordVo.java @@ -58,5 +58,9 @@ public class ServiceWorkOrdersRecordVo implements Serializable { @ExcelProperty(value = "创建时间") private Date createTime; + /** + * 处理人名称 + */ + private String handleName; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersRecordService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersRecordService.java new file mode 100644 index 00000000..08bfae25 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersRecordService.java @@ -0,0 +1,22 @@ +package org.dromara.property.service; + +import org.dromara.property.domain.vo.ServiceWorkOrdersRecordVo; + +import java.util.Collection; +import java.util.List; + +/** + * @author lsm + * @apiNote IServiceWorkOrdersRecordService + * @since 2025/9/9 + */ +public interface IServiceWorkOrdersRecordService { + + /** + * 通过工单id查询记录 + * + * @param ids 工单id + * @return list + */ + List queryListByOrderId(Collection ids); +} 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..b8f74e69 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 @@ -74,16 +74,17 @@ public interface IServiceWorkOrdersService { /** * 工单服务看板 + * * @return */ ServiceWorkOrderAnalysisVo counts(); - //小程序端新增 /** * 新增工单 + * * @param bo * @return */ @@ -91,10 +92,12 @@ public interface IServiceWorkOrdersService { /** * 查询工单处理人枚举 + * * @param type * @return */ List> getServiceWorkOrdersHandler(String type); + /** * 分页查询【工单处理】列表 * @@ -112,6 +115,13 @@ public interface IServiceWorkOrdersService { */ Boolean insertOrderByXcx(ServiceWorkOrdersBo bo); + /** + * xcx更新工单详情 + * + * @param bo bean + * @return Boolean + */ + Boolean updateOrderByXcx(ServiceWorkOrdersBo bo); /** * xcx查询本人上报工单 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersRecordImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersRecordImpl.java new file mode 100644 index 00000000..a4558278 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersRecordImpl.java @@ -0,0 +1,39 @@ +package org.dromara.property.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.property.domain.ServiceWorkOrdersRecord; +import org.dromara.property.domain.vo.ServiceWorkOrdersRecordVo; +import org.dromara.property.mapper.ServiceWorkOrdersRecordMapper; +import org.dromara.property.service.IServiceWorkOrdersRecordService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; + +/** + * @author lsm + * @apiNote ServiceWorkOrdersRecordImpl + * @since 2025/9/9 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class ServiceWorkOrdersRecordImpl implements IServiceWorkOrdersRecordService { + + private final ServiceWorkOrdersRecordMapper baseMapper; + + /** + * 通过工单id查询记录 + * + * @param ids 工单id + * @return list + */ + @Override + public List queryListByOrderId(Collection ids) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(ServiceWorkOrdersRecord::getOrderId, ids); + return baseMapper.selectVoList(lqw); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java index e54e1b34..b5d81de8 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 @@ -22,6 +22,8 @@ import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.property.api.model.LoginResidentPerson; import org.dromara.property.domain.*; import org.dromara.property.domain.bo.ServiceWorkOrdersBo; +import org.dromara.property.domain.bo.ServiceWorkOrdersRecordBo; +import org.dromara.property.domain.bo.ServiceWorkOrdersTypeBo; import org.dromara.property.domain.bo.mobile.MServiceWorkOrdersBo; import org.dromara.property.domain.enums.OrderReportingTypeEnum; import org.dromara.property.domain.enums.OrderTypeOperationEnum; @@ -34,6 +36,7 @@ import org.dromara.property.mapper.ServiceWorkOrdersMapper; import org.dromara.property.mapper.ServiceWorkOrdersRecordMapper; import org.dromara.property.mapper.ServiceWorkOrdersTypeMapper; import org.dromara.property.mapper.attendanceMapper.AttendanceUserGroupMapper; +import org.dromara.property.service.IServiceWorkOrdersRecordService; import org.dromara.property.service.IServiceWorkOrdersService; import org.dromara.property.service.IServiceWorkOrdersTypeService; import org.dromara.system.api.RemoteUserService; @@ -68,6 +71,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { /******************************xcx**************************************/ private final IServiceWorkOrdersTypeService serviceWorkOrdersTypeService; + private final IServiceWorkOrdersRecordService serviceWorkOrdersRecordService; /** @@ -719,6 +723,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { Assert.notNull(typeVo, "工单类型不存在"); assert add != null; + add.setOrderName("工单名称"); add.setOrderNo("GD" + IdUtil.getSnowflakeNextIdStr()); add.setStatus(WorkOrderStatusEnum.CREATE_ORDER.getValue()); add.setReportingType(OrderReportingTypeEnum.PHONE_REPORT.getValue()); @@ -745,6 +750,23 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { return flag; } + /** + * xcx更新工单详情 + * + * @param bo bean + * @return Boolean + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateOrderByXcx(ServiceWorkOrdersBo bo) { + ServiceWorkOrders update = MapstructUtils.convert(bo, ServiceWorkOrders.class); + Assert.notNull(update, "数据处理失败"); + + boolean flag = baseMapper.updateById(update) > 0; + Assert.isTrue(flag, "小程序修改工单信息失败"); + return flag; + } + /** * xcx查询本人上报工单 * @@ -759,7 +781,37 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { assert person != null; qw.like(ServiceWorkOrders::getInitiatorPeople, person.getNickname()) .orderByDesc(ServiceWorkOrders::getCreateTime); - return baseMapper.selectVoList(qw); + List ordersVos = baseMapper.selectVoList(qw); + if (CollUtil.isNotEmpty(ordersVos)) { + // 工单类型 + List typeVoLists = serviceWorkOrdersTypeService.queryList(new ServiceWorkOrdersTypeBo()); + + // 处理人 + List handlerIdList = ordersVos.stream().map(ServiceWorkOrdersVo::getHandler).distinct().toList(); + List remoteUserVos = remoteUserService.selectListByIds(handlerIdList); + + // 工单记录 + Collection orderIdList = ordersVos.stream().map(ServiceWorkOrdersVo::getId).toList(); + List recordVos = serviceWorkOrdersRecordService.queryListByOrderId(orderIdList); + + for (ServiceWorkOrdersVo item : ordersVos) { + // 工单类型 + typeVoLists.stream().filter(type -> type.getId().equals(item.getType())).findFirst().ifPresent(typeVo -> item.setTypeName(typeVo.getOrderTypeName())); + + // 处理人 + remoteUserVos.stream().filter(user -> user.getUserId().equals(item.getHandler())).findFirst().ifPresent(remoteUserVo -> item.setHandlerText(remoteUserVo.getNickName())); + + if (CollUtil.isNotEmpty(recordVos)) { + List mapRecordVos = recordVos.stream().filter(o -> item.getId() == Long.parseLong(o.getOrderId())).toList(); + List mRecordVos = BeanUtil.copyToList(mapRecordVos, MServiceWorkOrdersRecordVo.class); + mRecordVos.forEach(o -> { + o.setHandlerName(StringUtils.isNotBlank(item.getHandlerText()) ? item.getHandlerText() : null); + }); + item.setRecordVoList(mRecordVos); + } + } + } + return ordersVos; } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java index dff02dba..78f4a58c 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java @@ -43,6 +43,8 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -239,10 +241,10 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { }).toList(); treeList.addAll(l3); + TbMeterInfoBo bo = new TbMeterInfoBo(); + bo.setMeterType(meterType); + List meterInfoVos = this.queryList(bo); if (isMeter) { - TbMeterInfoBo bo = new TbMeterInfoBo(); - bo.setMeterType(meterType); - List meterInfoVos = this.queryList(bo); if (meterInfoVos != null && !meterInfoVos.isEmpty()) { List> l4 = meterInfoVos.stream().map(item -> { TreeNode node = new TreeNode<>(); @@ -254,6 +256,13 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { }).toList(); treeList.addAll(l4); } + } else { + if (meterInfoVos != null && !meterInfoVos.isEmpty()) { + for (TreeNode node : l3) { + List vo = meterInfoVos.stream().filter(item -> item.getFloorId().equals(node.getCode())).toList(); + node.setLabel(node.getLabel() + "(" + vo.size() + ")"); + } + } } return TreeUtils.build(treeList, 0L); } @@ -299,8 +308,10 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { return; } + List sortedMeterInfoVoList = meterSort(meterInfoVoList); + // 获取唯一的主机IP列表 - String[] hostIpArr = meterInfoVoList.stream().map(TbMeterInfoVo::getHostIp).distinct().toArray(String[]::new); + String[] hostIpArr = sortedMeterInfoVoList.stream().map(TbMeterInfoVo::getHostIp).distinct().toArray(String[]::new); // 统计每个IP对应的仪表数量 Map ipCountMap = new HashMap<>(); @@ -319,13 +330,52 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { log.info("仪表数据获取耗时:{}ms", timeInterval.interval()); } catch (Exception e) { // 获取数据失败,设置所有仪表通信状态为0并发送消息 - handleMeterCommunicationFailure(user, jsonObject, meterInfoVoList, tokenValue); + handleMeterCommunicationFailure(user, jsonObject, sortedMeterInfoVoList, tokenValue); return; } // 处理仪表读数和状态 - processMeterResults(user, jsonObject, meterResults, meterInfoVoList, tokenValue); - }, 30000,300000); + processMeterResults(user, jsonObject, meterResults, sortedMeterInfoVoList, tokenValue); + }, 30000, 180000); + } + + /** + * 仪表排序 + * + * @param meterInfoVoList 仪表列表 + * @return List 返回排序后的仪表列表 + */ + private List meterSort(List meterInfoVoList) { + // 创建比较器 + Comparator comparator = (m1, m2) -> { + // 提取楼层和编号数值 + int[] parts1 = extractNumbers(m1.getMeterName()); + int[] parts2 = extractNumbers(m2.getMeterName()); + + // 先比较楼层 + if (parts1[0] != parts2[0]) { + return Integer.compare(parts1[0], parts2[0]); + } + // 楼层相同则比较编号 + return Integer.compare(parts1[1], parts2[1]); + }; + + return meterInfoVoList.stream().sorted(comparator).toList(); + } + + /** + * 从字符串提取数字(返回[楼层, 编号]) + * + * @param name 仪表名称 + * @return int[] + */ + private int[] extractNumbers(String name) { + Pattern pattern = Pattern.compile("(\\d+)楼电表(\\d+)号"); + Matcher matcher = pattern.matcher(name); + if (matcher.find()) { + return new int[]{Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2))}; + } + return new int[]{0, 0}; // 匹配失败时返回默认值 } /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java index 5e917eab..0fe94eb6 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; @@ -14,6 +15,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.property.domain.bo.smartDevicesBo.TbMeterInfoBo; +import org.dromara.property.domain.entity.smartDevices.TbMeterInfo; import org.dromara.property.domain.enums.MeterRecordTypeEnum; import org.dromara.property.domain.vo.smartDevicesVo.TbMeterInfoVo; import org.dromara.property.rocketmq.domain.MeterResult; @@ -27,6 +29,7 @@ import org.dromara.property.service.smartDevicesService.ITbMeterRecordService; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -209,6 +212,14 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService { record.setCurrentReading(BigDecimal.ZERO); } + if (record.getCurrentReading().compareTo(BigDecimal.ZERO) == 0){ + // 通信状态改为离线 + TbMeterInfoBo bo = new TbMeterInfoBo(); + bo.setId(info.getId()); + bo.setCommunicationState(0L); + tbMeterInfoService.updateByBo(bo); + } + // 设置上次读数 if (hasOldRecords) { TbMeterRecord oldRecord = oldRecordMap.get(info.getId()); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisVisitorController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/E8Controller.java similarity index 77% rename from ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisVisitorController.java rename to ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/E8Controller.java index 01d34f98..c4e21d33 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisVisitorController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/E8Controller.java @@ -4,11 +4,13 @@ import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.sis.sdk.e8.E8PlatformApi; import org.dromara.sis.sdk.e8.domain.QueryDto; import org.dromara.sis.sdk.e8.domain.accessControl.req.AccessRecordFindReq; import org.dromara.sis.sdk.e8.domain.accessControl.res.AccessRecordFindRes; +import org.dromara.sis.sdk.e8.domain.door.res.AuthDoorDeviceFindRes; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -16,6 +18,9 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @author yuyongle @@ -25,14 +30,16 @@ import java.util.Date; @Validated @RequiredArgsConstructor @RestController -@RequestMapping("/visitor") -public class SisVisitorController { +@RequestMapping("/e8") +public class E8Controller { private final E8PlatformApi e8PlatformApi; /** * 查询人员通行记录 + * + * @return tableDataInfo */ - @GetMapping("/list") + @GetMapping("/visitor/list") public TableDataInfo list(@RequestParam(required = false) String begTime, @RequestParam(required = false) String endTime, @NotNull(message = "页码不能为空") @RequestParam Integer pageNum, @@ -67,4 +74,18 @@ public class SisVisitorController { dto.setMaxResultCount(pageSize); return e8PlatformApi.getPageAccessRecordList(dto); } + + /** + * 查询门禁设备在线情况 + * + * @return Map + */ + @GetMapping("/door/online") + public R> doorOnline() { + List list = e8PlatformApi.getPageAuthDoorDeviceList(); + Map map = new HashMap<>(); + map.put("on", list.stream().filter(o -> o.getOnlineStatus() == 1).count()); + map.put("off", list.stream().filter(o -> o.getOnlineStatus() == 0).count()); + return R.ok(map); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisDeviceManageController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisDeviceManageController.java index f31ed593..ce98bf55 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisDeviceManageController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisDeviceManageController.java @@ -23,7 +23,9 @@ import org.dromara.sis.service.ISisDeviceManageService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 设备管理 @@ -114,5 +116,17 @@ public class SisDeviceManageController extends BaseController { return R.ok(sisDeviceManageService.tree()); } - + /** + * 统计设备在线状态 + * + * @return map + */ + @GetMapping("/online") + public R> getOnlineStatus() { + List list = sisDeviceManageService.queryList(new SisDeviceManageBo()); + Map map = new HashMap<>(); + map.put("on", list.stream().filter(o -> o.getDeviceStatus() == 1).count()); + map.put("off", list.stream().filter(o -> o.getDeviceStatus() == 0).count()); + return R.ok(map); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java index f6190037..46c1aefe 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java @@ -61,6 +61,11 @@ public class SisDeviceManageVo implements Serializable { */ private Integer deviceType; + /** + * 设备在线状态 0:离线 1:在线 2:未知 + */ + private Integer deviceStatus; + /** * 设备类型 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java index 0f58f525..34844bf5 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java @@ -29,4 +29,9 @@ public class AuthDoorDeviceFindRes { * 门禁Id */ private Long deviceId; + + /** + * 门禁状态 + */ + private Integer onlineStatus; } From 81c95f124e00bf9497eff198ff7ab939f8ad3fcc Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Tue, 9 Sep 2025 20:56:04 +0800 Subject: [PATCH 05/14] 1 --- .../xcx/XServiceWorkOrdersTypeController.java | 11 ---- .../xcx/XTbVisitorManagementController.java | 27 ++------ .../ResidentPersonServiceImpl.java | 13 +++- .../sis/dubbo/RemoteVisitorServiceImpl.java | 20 +++--- .../job/snailjob/sis/SyncGrantAuthTask.java | 66 +++++++++---------- 5 files changed, 59 insertions(+), 78 deletions(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XServiceWorkOrdersTypeController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XServiceWorkOrdersTypeController.java index c4e5fdf2..ec198378 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XServiceWorkOrdersTypeController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XServiceWorkOrdersTypeController.java @@ -1,21 +1,10 @@ package org.dromara.property.controller.xcx; import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; -import org.dromara.property.domain.bo.ServiceWorkOrdersTypeBo; import org.dromara.property.domain.vo.ServiceWorkOrdersTypeVo; import org.dromara.property.service.IServiceWorkOrdersTypeService; import org.springframework.validation.annotation.Validated; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XTbVisitorManagementController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XTbVisitorManagementController.java index eb2171b2..1145aea1 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XTbVisitorManagementController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XTbVisitorManagementController.java @@ -1,39 +1,21 @@ package org.dromara.property.controller.xcx; import cn.dev33.satoken.annotation.SaCheckPermission; -import cn.dev33.satoken.stp.StpUtil; -import com.alibaba.fastjson.JSONObject; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; -import org.apache.dubbo.config.annotation.DubboReference; -import org.dromara.common.core.constant.GlobalConstants; 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.excel.utils.ExcelUtil; import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.web.core.BaseController; -import org.dromara.common.websocket.dto.WebSocketMessageDto; -import org.dromara.common.websocket.holder.WebSocketSessionHolder; -import org.dromara.common.websocket.utils.WebSocketUtils; -import org.dromara.property.domain.bo.QrCodeInfo; import org.dromara.property.domain.bo.TbVisitorManagementBo; import org.dromara.property.domain.vo.TbVisitorManagementVo; import org.dromara.property.service.ITbVisitorManagementService; -import org.dromara.system.api.RemoteConfigService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.time.Duration; import java.util.List; -import java.util.UUID; +import java.util.Map; /** * 访客管理 @@ -104,10 +86,11 @@ public class XTbVisitorManagementController extends BaseController { */ @GetMapping("/qrCode/{id}") @SaCheckPermission("xcx:visitorManagement:getQrCode") - public R getQrCode(@NotNull(message = "主键不能为空") + public R getQrCode(@NotNull(message = "主键不能为空") @PathVariable("id") Long id) { - int code = Integer.parseInt(tbVisitorManagementService.getQrCodeByIdForXcx(id).get("code").toString()); - return code == 200 ? R.ok(tbVisitorManagementService.getQrCodeByIdForXcx(id).get("data").toString()) : R.fail(tbVisitorManagementService.getQrCodeByIdForXcx(id).get("data").toString()); + Map res = tbVisitorManagementService.getQrCodeByIdForXcx(id); + int code = Integer.parseInt(res.get("code").toString()); + return code == 200 ? R.ok(res.get("data")) : R.fail(res.get("data")); } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentPersonServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentPersonServiceImpl.java index ae94b7a7..52030952 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentPersonServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentPersonServiceImpl.java @@ -176,8 +176,13 @@ public class ResidentPersonServiceImpl implements IResidentPersonService { ResidentPerson update = MapstructUtils.convert(bo, ResidentPerson.class); assert update != null; - // 人脸照片存在时,才同步修改授权 - if (update.getAuthGroupId() != null && update.getAuthEndDate() != null && update.getImg() != null) { + // 定义触发条件 + boolean shouldUpdateAuth = (update.getAuthGroupId() != null && + update.getAuthEndDate() != null && + update.getImg() != null) || + update.getState() != 1; + + if (shouldUpdateAuth) { ResidentPersonVo vo = queryById(update.getId()); Long e8Id = vo.getEEightId(); @@ -267,7 +272,7 @@ public class ResidentPersonServiceImpl implements IResidentPersonService { } /** - * 查询已上传图片,未授权人员 + * 查询已上传图片,未授权人员(账号启用,且审核通过) * * @return List */ @@ -276,6 +281,8 @@ public class ResidentPersonServiceImpl implements IResidentPersonService { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.isNotNull(ResidentPerson::getImg) .ne(ResidentPerson::getImg, "") + .eq(ResidentPerson::getState, 1) + .eq(ResidentPerson::getIsAudit, 1) .isNull(ResidentPerson::getEEightId); return baseMapper.selectVoList(lqw); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteVisitorServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteVisitorServiceImpl.java index b4807150..7903b218 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteVisitorServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteVisitorServiceImpl.java @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.common.core.utils.StringUtils; import org.dromara.resource.api.RemoteFileService; import org.dromara.sis.api.RemoteVisitorService; import org.dromara.sis.api.domain.RemoteVisitor; @@ -15,7 +16,6 @@ import org.dromara.sis.sdk.e8.domain.visitors.req.VisitorAddReq; import org.dromara.sis.sdk.e8.domain.visitors.res.VisitorAddRes; import org.dromara.sis.sdk.e8.utils.ImageUtil; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -44,14 +44,16 @@ public class RemoteVisitorServiceImpl implements RemoteVisitorService { @Override public Map syncE8PlatVisitor(RemoteVisitor visitor) { try { - byte[] imgByte = fileService.downloadToByteArray(Long.parseLong(visitor.getVisitorFaceImg())); - Assert.notNull(imgByte, "下载访客照片失败"); + String imgUrl = null; + if (StringUtils.isNotBlank(visitor.getVisitorFaceImg())) { + byte[] imgByte = fileService.downloadToByteArray(Long.parseLong(visitor.getVisitorFaceImg())); + Assert.notNull(imgByte, "下载访客照片失败"); - byte[] zipByte = imageUtil.compressImageToRequirements(imgByte); - - String imgUrl = e8PlatformApi.uploadFace(zipByte); - Assert.notNull(imgUrl, "e8平台上传访客照片失败"); + byte[] zipByte = imageUtil.compressImageToRequirements(imgByte); + imgUrl = e8PlatformApi.uploadFace(zipByte); + Assert.notNull(imgUrl, "e8平台上传访客照片失败"); + } VisitorAddReq req = new VisitorAddReq(); req.setVisitorName(visitor.getVisitorName()); req.setMobilePhone(visitor.getMobilePhone()); @@ -68,7 +70,7 @@ public class RemoteVisitorServiceImpl implements RemoteVisitorService { : Map.of("code", 500, "data", res.getMessage()); } catch (Exception e) { log.info(e.getMessage()); - return Map.of("code", 500, "data", "e8平台新增访客登记出错"); + return Map.of("code", 500, "data", e.getMessage()); } } @@ -90,7 +92,7 @@ public class RemoteVisitorServiceImpl implements RemoteVisitorService { } catch (Exception e) { log.info(e.getMessage()); - return Map.of("code", 500, "data", "e8平台获取访客二维码出错"); + return Map.of("code", 500, "data", e.getMessage()); } } } diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/SyncGrantAuthTask.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/SyncGrantAuthTask.java index 3a014bee..e6215acb 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/SyncGrantAuthTask.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/SyncGrantAuthTask.java @@ -48,7 +48,6 @@ public class SyncGrantAuthTask { // 需要先设置模拟上下文 SaTokenContextMockUtil.setMockContext(() -> { // 模拟登录 - StpUtil.login(1); unAuthPersonRef.set(remoteResidentPersonService.queryUnAuthPerson()); List unAuthPerson = unAuthPersonRef.get(); @@ -89,38 +88,39 @@ public class SyncGrantAuthTask { continue; } -// // 计算图片MD5 -// String nowMd5 = calculateMD5(imgByte); -// // 通过MD5查询相同图片 -// Long remoteId = remoteSisAuthService.queryHuaweiBoxIdByImgMd5(nowMd5); -// -// Long huaweiId; -// if (remoteId == null) { -// // 当前本地人像信息不存在相同照片,直接上传华为盒子 -// huaweiId = syncHuaweiBox(person, imgByte); -// } else { -// huaweiId = remoteId; -// } -// -// if (huaweiId == null) { -// log.info("华为盒子人像上传失败:{}-----{}", person.getName(), person.getId()); -// remoteSisAuthService.deletePersonAuth(List.of(person.getId()), new ArrayList<>()); -// continue; -// } -// -// Boolean update = false; -// try { -// update = remoteSisAuthService.updateImgByPersonId(person.getId(), huaweiId, nowMd5); -// } catch (Exception e) { -// remoteSisAuthService.deletePersonAuth(List.of(person.getId()), new ArrayList<>()); -// continue; -// } -// -// if (!update) { -// log.info("更新人像信息失败:{}-----{}", person.getName(), person.getId()); -// remoteSisAuthService.deletePersonAuth(List.of(person.getId()), new ArrayList<>()); -// continue; -// } + // 计算图片MD5 + String nowMd5 = calculateMD5(imgByte); + // 通过MD5查询相同图片 + Long remoteId = remoteSisAuthService.queryHuaweiBoxIdByImgMd5(nowMd5); + + Long huaweiId; + if (remoteId == null) { + // 当前本地人像信息不存在相同照片,直接上传华为盒子 + huaweiId = syncHuaweiBox(person, imgByte); + } else { + huaweiId = remoteId; + } + + if (huaweiId == null) { + log.info("华为盒子人像上传失败:{}-----{}", person.getName(), person.getId()); + remoteSisAuthService.deletePersonAuth(List.of(person.getId()), new ArrayList<>()); + continue; + } + + Boolean update; + try { + update = remoteSisAuthService.updateImgByPersonId(person.getId(), huaweiId, nowMd5); + } catch (Exception e) { + log.info("更新人像信息出错:{}-----{}", person.getName(), person.getId()); + remoteSisAuthService.deletePersonAuth(List.of(person.getId()), new ArrayList<>()); + continue; + } + + if (!update) { + log.info("更新人像信息失败:{}-----{}", person.getName(), person.getId()); + remoteSisAuthService.deletePersonAuth(List.of(person.getId()), new ArrayList<>()); + continue; + } // 黑名单不授权到E8 if (!Objects.equals(person.getRosterType(), RosterTypeEnum.BLACK_LIST.getCode())) { From f2edd58dfff3b9aae750560031a164a30c3945ed Mon Sep 17 00:00:00 2001 From: 15683799673 Date: Wed, 10 Sep 2025 09:45:27 +0800 Subject: [PATCH 06/14] =?UTF-8?q?=E5=A4=84=E7=90=86=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90=E6=8C=87=E6=B4=BE=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/sis/rocketmq/consumer/HighDensityConsumer.java | 2 +- .../dromara/sis/rocketmq/consumer/ParkingDelayConsumer.java | 2 +- .../dromara/sis/service/impl/SisAlarmEventsServiceImpl.java | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/consumer/HighDensityConsumer.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/consumer/HighDensityConsumer.java index 427cb115..ab2f45a5 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/consumer/HighDensityConsumer.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/consumer/HighDensityConsumer.java @@ -36,7 +36,7 @@ public class HighDensityConsumer implements RocketMQListener { HighDensity f = JSONObject.parseObject(ext.getBody(), HighDensity.class); eventAlarmReportService.handleHighDensity(f); } catch (Exception e) { - log.error("消费人脸抓拍数据处理失败,", e); + log.error("消费人员聚集数据处理失败,", e); } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/consumer/ParkingDelayConsumer.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/consumer/ParkingDelayConsumer.java index 718a505a..4b901fb6 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/consumer/ParkingDelayConsumer.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/consumer/ParkingDelayConsumer.java @@ -36,7 +36,7 @@ public class ParkingDelayConsumer implements RocketMQListener { ParkingReport report = JSONObject.parseObject(ext.getBody(), ParkingReport.class); eventAlarmReportService.handleParking(report); } catch (Exception e) { - log.error("消费人脸抓拍数据处理失败,", e); + log.error("消费停车检测数据,", e); } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java index fe7af73d..732e4acf 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java @@ -222,13 +222,15 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { // 写入事件处理表 SisAlarmEventProcess alarmEventProcess = new SisAlarmEventProcess(); alarmEventProcess.setAlarmId(alarmEvents.getSolveId()); + // 默认为超级管理员创建 + alarmEventProcess.setSolveId(1L); + alarmEventProcess.setSolveName("超级管理员"); alarmEventProcess.setState(alarmEvents.getState()); alarmEventProcess.setWorkReply("系统自动生成"); alarmEventProcess.setWorkReplyTime(new Date()); alarmEventProcess.setTenantId(sisDeviceManage.getTenantId()); alarmEventProcessService.insert(alarmEventProcess); - // 写入附件表 List ls = new ArrayList<>(); for (byte[] img : imgs) { From 33523867aae5d3a1ce385ab1590378730553ed27 Mon Sep 17 00:00:00 2001 From: 15683799673 Date: Wed, 10 Sep 2025 10:08:16 +0800 Subject: [PATCH 07/14] =?UTF-8?q?=E5=A4=84=E7=90=86=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=8C=87=E6=B4=BE=E6=B2=A1=E6=9C=89=E7=A7=9F=E6=88=B7id?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sis/service/impl/SisAlarmEventsServiceImpl.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java index 732e4acf..be817438 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java @@ -256,11 +256,11 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { @Transactional(rollbackFor = Exception.class) public Boolean taskAssignment(AlarmAssignmentBo bo) { // 验证工单状态 - SisAlarmEventsVo sisAlarmEventsVo = this.baseMapper.selectVoById(bo.getAlarmId()); - if (sisAlarmEventsVo == null) { + SisAlarmEvents sisAlarmEvents = this.baseMapper.selectById(bo.getAlarmId()); + if (sisAlarmEvents == null) { throw new RuntimeException("工单信息不存在!"); } - if (!sisAlarmEventsVo.getState().equals(AlarmStatus.REPORTED.getCode())) { + if (!sisAlarmEvents.getState().equals(AlarmStatus.REPORTED.getCode())) { throw new RuntimeException("当前工单已指派,请刷新后重新指派!"); } @@ -282,7 +282,7 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { } SisAlarmEvents events = new SisAlarmEvents(); - events.setId(sisAlarmEventsVo.getId()); + events.setId(sisAlarmEvents.getId()); events.setSolveId(bo.getSolveId()); events.setSolveName(bo.getSolveName()); events.setSolvePhone(bo.getSolvePhone()); @@ -294,13 +294,14 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { log.info("修改事件表完成,result={}", i > 0); // 写入处理流程 SisAlarmEventProcess process = new SisAlarmEventProcess(); - process.setAlarmId(sisAlarmEventsVo.getId()); + process.setAlarmId(sisAlarmEvents.getId()); process.setSolveId(attendInfo.getEmployeeId()); process.setSolveName(attendInfo.getEmployeeName()); process.setWorkReply(bo.getRemark()); process.setState(events.getState()); process.setWorkReplyTime(now); process.setReceiveTaskTag(0L); + process.setTenantId(sisAlarmEvents.getTenantId()); Boolean insert = alarmEventProcessService.insert(process); log.info("事件处理信息写入完成,result= {}", insert); //TODO 推送到执行客户端 From 3317793834503b7544f2f9ee936dd7da9ab4584a Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Wed, 10 Sep 2025 10:25:25 +0800 Subject: [PATCH 08/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E7=B1=BB=E5=9E=8Bbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/vo/ServiceWorkOrdersTypeVo.java | 6 ++++ .../domain/vo/cleanOrderVo/CleanOrderVo.java | 6 ---- .../ServiceWorkOrdersTypeServiceImpl.java | 27 ++++++++++---- .../cleanOrderImpl/CleanOrderServiceImpl.java | 35 +------------------ 4 files changed, 27 insertions(+), 47 deletions(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersTypeVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersTypeVo.java index ec128904..c3c026d0 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersTypeVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersTypeVo.java @@ -39,6 +39,12 @@ public class ServiceWorkOrdersTypeVo implements Serializable { @ExcelProperty(value = "工单类型编号") private String orderTypeNo; + /** + * 工单数量 + */ + @ExcelProperty(value = "工单数量") + private Integer orderQuantity; + /** * 工单类型名称 */ 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 d03d059b..c473ad7e 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 @@ -155,10 +155,4 @@ 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/service/impl/ServiceWorkOrdersTypeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java index f425144e..d0183ac3 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 @@ -14,9 +14,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.property.domain.ServiceWorkOrders; import org.dromara.property.domain.ServiceWorkOrdersType; import org.dromara.property.domain.bo.ServiceWorkOrdersTypeBo; import org.dromara.property.domain.vo.ServiceWorkOrdersTypeVo; +import org.dromara.property.mapper.ServiceWorkOrdersMapper; import org.dromara.property.mapper.ServiceWorkOrdersTypeMapper; import org.dromara.property.service.IServiceWorkOrdersTypeService; import org.dromara.system.api.RemoteDeptService; @@ -41,9 +43,11 @@ import java.util.Collection; public class ServiceWorkOrdersTypeServiceImpl implements IServiceWorkOrdersTypeService { private final ServiceWorkOrdersTypeMapper baseMapper; + private final ServiceWorkOrdersMapper serviceWorkOrdersMapper; @DubboReference private RemoteDeptService remoteDeptService; + /** * 查询【工单类型】 * @@ -52,10 +56,18 @@ public class ServiceWorkOrdersTypeServiceImpl implements IServiceWorkOrdersTypeS */ @Override public ServiceWorkOrdersTypeVo queryById(Long id) { - ServiceWorkOrdersTypeVo serviceWorkOrdersTypeVo= baseMapper.selectVoById(id); - Long deptId = serviceWorkOrdersTypeVo.getDeptId(); - RemoteDeptVo remoteDeptVo = remoteDeptService.selectDeptVoById(deptId); - serviceWorkOrdersTypeVo.setDeptName(remoteDeptVo.getDeptName()); + ServiceWorkOrdersTypeVo serviceWorkOrdersTypeVo = baseMapper.selectVoById(id); + if (ObjectUtil.isNotEmpty(serviceWorkOrdersTypeVo)) { + Long deptId = serviceWorkOrdersTypeVo.getDeptId(); + RemoteDeptVo remoteDeptVo = remoteDeptService.selectDeptVoById(deptId); + serviceWorkOrdersTypeVo.setDeptName(remoteDeptVo.getDeptName()); + //查询工单数量 + List serviceWorkOrdersList = serviceWorkOrdersMapper.selectList( + new LambdaQueryWrapper() + .eq(ServiceWorkOrders::getType, id) + ); + serviceWorkOrdersTypeVo.setOrderQuantity(serviceWorkOrdersList.size()); + } return serviceWorkOrdersTypeVo; } @@ -87,7 +99,7 @@ public class ServiceWorkOrdersTypeServiceImpl implements IServiceWorkOrdersTypeS @Override public List queryList(ServiceWorkOrdersTypeBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - List serviceWorkOrdersTypeVoList= baseMapper.selectVoList(lqw); + List serviceWorkOrdersTypeVoList = baseMapper.selectVoList(lqw); serviceWorkOrdersTypeVoList.stream().forEach(vo -> { Long deptId = vo.getDeptId(); RemoteDeptVo remoteDeptVo = remoteDeptService.selectDeptVoById(deptId); @@ -107,7 +119,7 @@ public class ServiceWorkOrdersTypeServiceImpl implements IServiceWorkOrdersTypeS lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), ServiceWorkOrdersType::getSearchValue, bo.getSearchValue()); lqw.eq(ObjectUtil.isNotEmpty(bo.getParentId()), ServiceWorkOrdersType::getParentId, bo.getParentId()); lqw.isNull(bo.getFilterSubNodes() != null && bo.getFilterSubNodes(), ServiceWorkOrdersType::getParentId); - lqw.ne(bo.getExcludeId()!=null,ServiceWorkOrdersType::getId,bo.getExcludeId()); + lqw.ne(bo.getExcludeId() != null, ServiceWorkOrdersType::getId, bo.getExcludeId()); return lqw; } @@ -204,7 +216,8 @@ public class ServiceWorkOrdersTypeServiceImpl implements IServiceWorkOrdersTypeS return tree; } - //APP端 + //APP端 + /** * 查询【工单类型】树结构 * 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 884f6dba..3482735d 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 @@ -95,27 +95,7 @@ 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; - } /** @@ -256,20 +236,7 @@ public class CleanOrderServiceImpl implements ICleanOrderService { /** * 保存后的数据校验 */ - 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") - ); - } + private void validEntityBeforeSave(CleanOrderBo bo) {} /** * 校验并批量删除保洁订单信息 From e8d87d355609e2783f5a701fd72d96e016dd67a0 Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Wed, 10 Sep 2025 17:32:58 +0800 Subject: [PATCH 09/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E7=B1=BB=E5=9E=8Bbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/vo/InspectionTaskDetailVo.java | 4 +- .../property/domain/vo/InspectionTaskVo.java | 5 ++ .../dromara/property/domain/vo/TbRoomVo.java | 5 +- .../impl/InspectionPlanServiceImpl.java | 59 +++++++-------- .../impl/InspectionTaskDetailServiceImpl.java | 74 ++++++++++++------- .../impl/ServiceWorkOrdersServiceImpl.java | 26 +++++-- 6 files changed, 106 insertions(+), 67 deletions(-) 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 e1a48883..73874903 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 @@ -71,7 +71,7 @@ public class InspectionTaskDetailVo implements Serializable { * 巡检计划text */ @ExcelProperty(value = " 巡检计划text") - private Long planText; + private String planText; /** * 巡检点id @@ -82,7 +82,7 @@ public class InspectionTaskDetailVo implements Serializable { * 巡检点text */ @ExcelProperty(value = "巡检点text") - private Long pointText; + private String pointText; /** * 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskVo.java index dcd475aa..e5637783 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskVo.java @@ -35,6 +35,11 @@ public class InspectionTaskVo implements Serializable { */ @ExcelProperty(value = "主键id") private Long id; + /** + * 任务名称 + */ + @ExcelProperty(value = "任务名称") + private String taskName; /** * 巡检计划id 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 35e6d934..aacf8c3c 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 @@ -111,8 +111,9 @@ public class TbRoomVo implements Serializable { /** * 状态('空置','已售','已租','自用') */ - @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "'=空置','已售','已租','自用'") + // @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) + @ExcelProperty(value = "状态") + //@ExcelDictFormat(readConverterExp = "'=空置','已售','已租','自用'") private Integer status; @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "status", other = "wy_fjzt") diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java index 968fae54..ff0e04e6 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java @@ -228,7 +228,7 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService { if (DateUtil.isIn(today, startDate, endDate) && inspectionDayList.contains(day)) { InspectionTask task = new InspectionTask(); task.setInspectionPlanId(p.getId()); - task.setTaskName(plan.getPlanName()+"的任务"); + task.setTaskName(plan.getPlanName() + "的任务"); task.setTaskType(plan.getSignType()); task.setPlanInsTime(startDate + "~" + p.getEndTime()); task.setTenantId(plan.getTenantId()); @@ -258,38 +258,35 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService { staffQueryWrapper.eq(InspectionPlanStaff::getInspectionPlanId, plan.getId()); //查询该计划巡查人员 List inspectionPlanStaffVos = inspectionPlanStaffMapper.selectVoList(staffQueryWrapper); - // 使用Optional安全处理可能为null的对象 - Optional.ofNullable(plan).ifPresent(p -> { - DateTime today = DateUtil.date(); - DateTime startDate = DateUtil.date(plan.getStartDate()); - DateTime endDate = DateUtil.date(plan.getEndDate()); - String week = String.valueOf(DateUtil.dayOfWeek(DateUtil.date())); - List inspectionWorkdayList = Arrays.asList(p.getInspectionWorkday().split(",")); - if (DateUtil.isIn(today, startDate, endDate) && inspectionWorkdayList.contains(week)) { - InspectionTask task = new InspectionTask(); - task.setInspectionPlanId(p.getId()); - task.setInspectionPlanId(p.getId()); - task.setTaskType(plan.getSignType()); - task.setTaskName(plan.getPlanName()+"的任务"); - task.setPlanInsTime(startDate + "~" + p.getEndTime()); - task.setTenantId(plan.getTenantId()); - task.setStatus("0"); - if (CollectionUtil.isNotEmpty(inspectionPlanStaffVos)) { - String userIds = inspectionPlanStaffVos.stream().map(vo -> vo.getUserId().toString()).collect(Collectors.joining(",")); + DateTime today = DateUtil.date(); + DateTime startDate = DateUtil.date(plan.getStartDate()); + DateTime endDate = DateUtil.date(plan.getEndDate()); + String week = String.valueOf(DateUtil.dayOfWeek(DateUtil.date())); + List inspectionWorkdayList = Arrays.asList(plan.getInspectionWorkday().split(",")); + if (DateUtil.isIn(today, startDate, endDate) && inspectionWorkdayList.contains(week)) { + InspectionTask task = new InspectionTask(); + task.setInspectionPlanId(plan.getId()); + task.setInspectionPlanId(plan.getId()); + task.setTaskType(plan.getSignType()); + task.setTaskName(plan.getPlanName() + "的任务"); + task.setPlanInsTime(startDate + "~" + plan.getEndTime()); + task.setTenantId(plan.getTenantId()); + task.setStatus("0"); + if (CollectionUtil.isNotEmpty(inspectionPlanStaffVos)) { + String userIds = inspectionPlanStaffVos.stream().map(vo -> vo.getUserId().toString()).collect(Collectors.joining(",")); - String userNames = inspectionPlanStaffVos.stream().map(InspectionPlanStaffVo::getUserName).collect(Collectors.joining(",")); - task.setPlanUserId(userIds); - task.setPlanUserName(userNames); - } else { - task.setPlanUserId(""); - task.setPlanUserName(""); - } - boolean b = inspectionTaskMapper.insert(task) > 0; - if (b) { - createTaskDetail(task, plan); - } + String userNames = inspectionPlanStaffVos.stream().map(InspectionPlanStaffVo::getUserName).collect(Collectors.joining(",")); + task.setPlanUserId(userIds); + task.setPlanUserName(userNames); + } else { + task.setPlanUserId(""); + task.setPlanUserName(""); } - }); + boolean b = inspectionTaskMapper.insert(task) > 0; + if (b) { + createTaskDetail(task, plan); + } + } } /** 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 3ea7a95f..705458fe 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 @@ -7,6 +7,7 @@ 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.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; @@ -30,6 +31,7 @@ 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.RemoteUserService; import org.dromara.system.api.model.LoginUser; import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.InspectionTaskDetailBo; @@ -60,7 +62,8 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer private final ServiceWorkOrdersMapper serviceWorkOrdersMapper; private final ServiceWorkOrdersRecordMapper workOrdersRecordMapper; private final AttendanceUserGroupMapper attendanceUserGroupMapper; - + @DubboReference + private RemoteUserService remoteUserService; /** * 查询巡检明细 * @@ -84,35 +87,49 @@ 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::getTaskName)); + //收集路线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)); + //收集计划id为list + List planIds = result.getRecords().stream().map(InspectionTaskDetailVo::getPlanId).toList(); + //收集计划列表 + Map planNameMap = inspectionPlanMapper.selectVoByIds(planIds).stream() + .collect(Collectors.toMap(InspectionPlanVo::getId, InspectionPlanVo::getPlanName)); + //巡检点id为list + List pointIds = result.getRecords().stream().map(InspectionTaskDetailVo::getPointId).toList(); + //巡检点列表 + Map pointNameMap = inspectionPointMapper.selectVoByIds(pointIds).stream() + .collect(Collectors.toMap(InspectionPointVo::getId, InspectionPointVo::getPointName)); result.getRecords().stream().forEach(vo -> { - disposeData(vo); + disposeData(vo,taskNameMap,routeNameMap,planNameMap,pointNameMap); }); } return TableDataInfo.build(result); } - private void disposeData(InspectionTaskDetailVo vo) { - + private void disposeData(InspectionTaskDetailVo vo,Map taskNameMap,Map routeNameMap, Map planNameMap,Map pointNameMap ) { + vo.setTaskText(taskNameMap.get(vo.getTaskId())); + vo.setRouteText(routeNameMap.get(vo.getRouteId())); + vo.setPlanText(planNameMap.get(vo.getPlanId())); + vo.setPointText(pointNameMap.get(vo.getPointId())); +// if(ObjectUtil.isNotEmpty( vo.getPlanInspectionPersonText() )){ +// //以,切割拼接成 +// String[] split = vo.getPlanInspectionPersonText().split(","); +// remoteUserService.selectNicknameById(Long.valueOf(vo.getPlanInspectionPerson())); +// vo.setPlanInspectionPersonText( ) +// } +// if(ObjectUtil.isNotEmpty(vo.setActualInspectionPerson())){ +// +// vo.setActualInspectionPersonText(); +// } } /** @@ -346,6 +363,9 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer serviceWorkOrders.setProcessingWeight(serviceWorkOrdersType.getProcessingWeight()); serviceWorkOrders.setType(serviceWorkOrdersType.getId()); serviceWorkOrders.setLocation(bo.getInspectionLocation()); + Date originalDate = new Date(); // 当前时间 + Date newDate = DateUtil.offsetHour(originalDate, serviceWorkOrdersType.getCompletionNumber()); + serviceWorkOrders.setPlanCompleTime(newDate); boolean flag = serviceWorkOrdersMapper.insert(serviceWorkOrders) > 0; if (flag) { bo.setId(serviceWorkOrders.getId()); @@ -358,6 +378,10 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer if (serviceWorkOrdersType.getOperationMode().equals(OrderTypeOperationEnum.AUTOMATE_DISPATCH.getValue())) { handleServiceWorkOrder(serviceWorkOrders, serviceWorkOrdersType, bo); } + //修改巡检明细接口绑定工单id + InspectionTaskDetail update = BeanUtil.copyProperties(bo, InspectionTaskDetail.class); + update.setOrderId(serviceWorkOrders.getId()); + baseMapper.updateById(update); } } return flag; @@ -411,10 +435,6 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer // 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/ServiceWorkOrdersServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java index 476f4a90..79c03c82 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 @@ -228,6 +228,9 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { add.setStatus(WorkOrderStatusEnum.CREATE_ORDER.getValue()); add.setInitiatorPeople(user.getNickname()); add.setProcessingWeight(serviceWorkOrdersType.getProcessingWeight()); + Date originalDate = new Date(); // 当前时间 + Date newDate = DateUtil.offsetHour(originalDate, serviceWorkOrdersType.getCompletionNumber()); + add.setPlanCompleTime(newDate); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { @@ -332,11 +335,21 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { ordersLambdaQueryWrapper.eq(ServiceWorkOrdersRecord::getStatus, entity.getStatus()); boolean exists = workOrdersRecordMapper.exists(ordersLambdaQueryWrapper); //TODO 做一些数据校验,如唯一约束 - ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord(); - serviceWorkOrdersRecord.setOrderId(entity.getId()); - serviceWorkOrdersRecord.setStatus(entity.getStatus()); - serviceWorkOrdersRecord.setHandler(entity.getHandler()); - workOrdersRecordMapper.insert(serviceWorkOrdersRecord); + if (!exists) { + ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord(); + serviceWorkOrdersRecord.setOrderId(entity.getId()); + serviceWorkOrdersRecord.setStatus(entity.getStatus()); + serviceWorkOrdersRecord.setHandler(entity.getHandler()); + boolean b = workOrdersRecordMapper.insert(serviceWorkOrdersRecord) > 0; + if (b) { + if (serviceWorkOrdersRecord.getStatus().equals(WorkOrderStatusEnum.DONE.getValue())) { + entity.setCompleTime(new Date()); + entity.setIsTimeOut( DateUtil.compare(new Date(), entity.getPlanCompleTime())>0?"1":"0"); + baseMapper.updateById(entity); + } + } + + } } /** @@ -594,6 +607,9 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { add.setReportingType(OrderReportingTypeEnum.PHONE_REPORT.getValue()); add.setProcessingWeight(serviceWorkOrdersType.getProcessingWeight()); add.setInitiatorPeople(user.getNickname()); + Date originalDate = new Date(); // 当前时间 + Date newDate = DateUtil.offsetHour(originalDate, serviceWorkOrdersType.getCompletionNumber()); + add.setPlanCompleTime(newDate); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { From 0b087ba73b5d1185a0889b36cbc1a03beda2fdce Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Wed, 10 Sep 2025 18:08:58 +0800 Subject: [PATCH 10/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E7=B1=BB=E5=9E=8Bbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../property/service/impl/InspectionTaskDetailServiceImpl.java | 1 + .../property/service/impl/ServiceWorkOrdersServiceImpl.java | 2 ++ 2 files changed, 3 insertions(+) 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 705458fe..a76cc61c 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 @@ -363,6 +363,7 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer serviceWorkOrders.setProcessingWeight(serviceWorkOrdersType.getProcessingWeight()); serviceWorkOrders.setType(serviceWorkOrdersType.getId()); serviceWorkOrders.setLocation(bo.getInspectionLocation()); + serviceWorkOrders.setIsTimeOut("0"); Date originalDate = new Date(); // 当前时间 Date newDate = DateUtil.offsetHour(originalDate, serviceWorkOrdersType.getCompletionNumber()); serviceWorkOrders.setPlanCompleTime(newDate); 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 79c03c82..3a75ad22 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 @@ -228,6 +228,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { add.setStatus(WorkOrderStatusEnum.CREATE_ORDER.getValue()); add.setInitiatorPeople(user.getNickname()); add.setProcessingWeight(serviceWorkOrdersType.getProcessingWeight()); + add.setIsTimeOut("0"); Date originalDate = new Date(); // 当前时间 Date newDate = DateUtil.offsetHour(originalDate, serviceWorkOrdersType.getCompletionNumber()); add.setPlanCompleTime(newDate); @@ -607,6 +608,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { add.setReportingType(OrderReportingTypeEnum.PHONE_REPORT.getValue()); add.setProcessingWeight(serviceWorkOrdersType.getProcessingWeight()); add.setInitiatorPeople(user.getNickname()); + add.setIsTimeOut("0"); Date originalDate = new Date(); // 当前时间 Date newDate = DateUtil.offsetHour(originalDate, serviceWorkOrdersType.getCompletionNumber()); add.setPlanCompleTime(newDate); From a3bd994fa362fc51187fd41093d8808431d4495c Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Wed, 10 Sep 2025 20:24:29 +0800 Subject: [PATCH 11/14] =?UTF-8?q?refactor(sis):=20-=20=E7=AC=AC=E4=B8=89?= =?UTF-8?q?=E6=96=B9=E6=95=B0=E6=8D=AE=E6=B7=BB=E5=8A=A0=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E9=80=9A=E8=BF=87mq=E5=9B=9E=E5=86=99=E4=BF=A1=E6=81=AF=20refa?= =?UTF-8?q?ctor(property):=20-=20=E4=BB=AA=E8=A1=A8sse=E6=8E=A8=E9=80=81?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=B0=B4=E8=A1=A8=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/domain/vo/RemoteResidentPersonVo.java | 2 + .../sis/api/domain/RemotePersonAuth.java | 2 + .../vo/residentVo/ResidentPersonVo.java | 2 + .../RemoteResidentPersonServiceImpl.java | 2 + .../property/rocketmq/RocketMqConstants.java | 8 +- .../rocketmq/consumer/AuthRecordConsumer.java | 9 + .../impl/ServiceWorkOrdersServiceImpl.java | 1 + .../TbMeterInfoServiceImpl.java | 25 +- .../dromara/sis/controller/E8Controller.java | 5 +- .../sis/domain/bo/SisPersonLibImgBo.java | 5 + .../sis/dubbo/RemoteSisAuthServiceImpl.java | 79 +++- .../sis/dubbo/RemoteVisitorServiceImpl.java | 2 +- .../sis/rocketmq/RocketMqConstants.java | 2 + .../rocketmq/producer/ProducerService.java | 37 ++ .../org/dromara/sis/sdk/e8/E8PlatformApi.java | 62 +-- .../dromara/sis/sdk/e8/domain/ApiResp.java | 4 +- .../sdk/e8/service/E8PlatformApiService.java | 442 +++++++----------- .../dromara/sis/sdk/e8/utils/E8ApiUtil.java | 40 +- .../dromara/sis/sdk/huawei/HuaWeiBoxApi.java | 6 +- .../huawei/service/HuaWeiBoxApiService.java | 10 +- .../impl/EventAlarmReportServiceImpl.java | 2 +- .../impl/SisAccessControlServiceImpl.java | 2 +- .../impl/SisAuthRecordServiceImpl.java | 5 +- .../impl/SisPersonLibImgServiceImpl.java | 20 +- .../dromara/sis/task/SyncLiftAuthTask.java | 4 +- .../job/snailjob/sis/SyncGrantAuthTask.java | 7 +- 26 files changed, 399 insertions(+), 386 deletions(-) create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/consumer/AuthRecordConsumer.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/producer/ProducerService.java diff --git a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteResidentPersonVo.java b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteResidentPersonVo.java index 56e240dd..f708efd9 100644 --- a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteResidentPersonVo.java +++ b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteResidentPersonVo.java @@ -36,4 +36,6 @@ public class RemoteResidentPersonVo implements Serializable { private Date authEndDate; private Integer rosterType; + + private String tenantId; } diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePersonAuth.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePersonAuth.java index da60b171..91ba60e2 100644 --- a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePersonAuth.java +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePersonAuth.java @@ -45,4 +45,6 @@ public class RemotePersonAuth implements Serializable { private Integer rosterType; + private String tenantId; + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonVo.java index a068ff44..30124827 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonVo.java @@ -167,4 +167,6 @@ public class ResidentPersonVo implements Serializable { private Date updateTime; + private String tenantId; + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java index 3f9400ae..f72452d2 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java @@ -43,6 +43,7 @@ public class RemoteResidentPersonServiceImpl implements RemoteResidentPersonServ remoteResidentPersonVo.setAuthGroupId(vo.getAuthGroupId()); remoteResidentPersonVo.setAuthBegDate(vo.getAuthBegDate()); remoteResidentPersonVo.setAuthEndDate(vo.getAuthEndDate()); + remoteResidentPersonVo.setTenantId(vo.getTenantId()); return remoteResidentPersonVo; }).toList(); } @@ -53,6 +54,7 @@ public class RemoteResidentPersonServiceImpl implements RemoteResidentPersonServ ResidentPersonBo bo = new ResidentPersonBo(); bo.setId(personId); bo.setEEightId(e8Id); + bo.setRemark(""); return residentPersonService.updateByBo(bo); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/RocketMqConstants.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/RocketMqConstants.java index df5b8a4e..b34618c9 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/RocketMqConstants.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/RocketMqConstants.java @@ -9,10 +9,16 @@ public interface RocketMqConstants { // mq topic String TOPIC = "SmartParks"; - // mq GROUP + // 仪表消费组 String METER_GROUP = "METER_GROUP"; + // 授权记录消费组 + String AUTH_GROUP = "AUTH_GROUP"; + /*-----------------------------------消息tag------------------------------------*/ + // 仪表记录 String METER_RECORD = "METER_RECORD_TAG"; + // 授权记录 + String AUTH_RECORD = "AUTH_MESSAGE_REPORT"; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/consumer/AuthRecordConsumer.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/consumer/AuthRecordConsumer.java new file mode 100644 index 00000000..f084633f --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/rocketmq/consumer/AuthRecordConsumer.java @@ -0,0 +1,9 @@ +package org.dromara.property.rocketmq.consumer; + +/** + * @author lsm + * @apiNote AuthRecordConsumer + * @since 2025/9/10 + */ +public class AuthRecordConsumer { +} 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 476f4a90..ab7beb9d 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 @@ -726,6 +726,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { assert add != null; add.setOrderName("工单名称"); + add.setProcessingWeight(typeVo.getProcessingWeight()); add.setOrderNo("GD" + IdUtil.getSnowflakeNextIdStr()); add.setStatus(WorkOrderStatusEnum.CREATE_ORDER.getValue()); add.setReportingType(OrderReportingTypeEnum.PHONE_REPORT.getValue()); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java index 78f4a58c..7c0db199 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java @@ -246,7 +246,8 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { List meterInfoVos = this.queryList(bo); if (isMeter) { if (meterInfoVos != null && !meterInfoVos.isEmpty()) { - List> l4 = meterInfoVos.stream().map(item -> { + List sortList = meterSort(meterInfoVos); + List> l4 = sortList.stream().map(item -> { TreeNode node = new TreeNode<>(); node.setLevel(4); node.setCode(item.getId()); @@ -278,20 +279,22 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { // 获取当前登录用户 LoginUser user = LoginHelper.getLoginUser(); String tokenValue = StpUtil.getTokenValue(); + String meter = meterType == 1L ? "power" : meterType == 2L ? "water" : meterType == 3L ? "gas" : ""; if (user == null) { - heartbeatTasks.stopTask(tokenValue); + heartbeatTasks.stopTask(tokenValue + meter); return; } // 参数校验 if (meterType == 0L || floorId == 0L) { - heartbeatTasks.stopTask(tokenValue); + heartbeatTasks.stopTask(tokenValue + meter); return; } // 初始化WebSocket消息 JSONObject jsonObject = new JSONObject(); jsonObject.put("type", "meter"); + jsonObject.put("meterType", meterType); // 查询仪表信息 TbMeterInfoBo meterInfoBo = new TbMeterInfoBo(); @@ -301,7 +304,7 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { // 如果没有仪表信息,直接返回 if (meterInfoVoList.isEmpty()) { - heartbeatTasks.stopTask(tokenValue); + heartbeatTasks.stopTask(tokenValue + meter); jsonObject.put("readingTime", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")); jsonObject.put("data", new ArrayList<>()); remoteMessageService.sendMessage(user.getUserId(), tokenValue, jsonObject.toString()); @@ -320,7 +323,7 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { } // 启动定时任务 - heartbeatTasks.startHeartbeatTask(tokenValue, () -> { + heartbeatTasks.startHeartbeatTask(tokenValue + meter, () -> { jsonObject.put("readingTime", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")); List meterResults; @@ -349,8 +352,8 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { // 创建比较器 Comparator comparator = (m1, m2) -> { // 提取楼层和编号数值 - int[] parts1 = extractNumbers(m1.getMeterName()); - int[] parts2 = extractNumbers(m2.getMeterName()); + int[] parts1 = extractNumbers(m1.getMeterName(), m1.getMeterType()); + int[] parts2 = extractNumbers(m2.getMeterName(), m2.getMeterType()); // 先比较楼层 if (parts1[0] != parts2[0]) { @@ -366,11 +369,13 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService { /** * 从字符串提取数字(返回[楼层, 编号]) * - * @param name 仪表名称 + * @param name 仪表名称 + * @param meterType 水电气类型 * @return int[] */ - private int[] extractNumbers(String name) { - Pattern pattern = Pattern.compile("(\\d+)楼电表(\\d+)号"); + private int[] extractNumbers(String name, Long meterType) { + String meter = meterType == 1L ? "电" : meterType == 2L ? "水" : "气"; + Pattern pattern = Pattern.compile("(\\d+)楼" + meter + "表(\\d+)号"); Matcher matcher = pattern.matcher(name); if (matcher.find()) { return new int[]{Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2))}; diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/E8Controller.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/E8Controller.java index c4e21d33..9b343ce0 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/E8Controller.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/E8Controller.java @@ -7,6 +7,7 @@ import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.sis.sdk.e8.E8PlatformApi; +import org.dromara.sis.sdk.e8.domain.ApiResp; import org.dromara.sis.sdk.e8.domain.QueryDto; import org.dromara.sis.sdk.e8.domain.accessControl.req.AccessRecordFindReq; import org.dromara.sis.sdk.e8.domain.accessControl.res.AccessRecordFindRes; @@ -72,7 +73,7 @@ public class E8Controller { dto.setQueryDto(req); dto.setPageIndex(pageNum); dto.setMaxResultCount(pageSize); - return e8PlatformApi.getPageAccessRecordList(dto); + return e8PlatformApi.getPageAccessRecordList(dto).getResult(); } /** @@ -82,7 +83,7 @@ public class E8Controller { */ @GetMapping("/door/online") public R> doorOnline() { - List list = e8PlatformApi.getPageAuthDoorDeviceList(); + List list = e8PlatformApi.getPageAuthDoorDeviceList().getResult(); Map map = new HashMap<>(); map.put("on", list.stream().filter(o -> o.getOnlineStatus() == 1).count()); map.put("off", list.stream().filter(o -> o.getOnlineStatus() == 0).count()); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java index 7a407e27..96ba4ed7 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java @@ -88,4 +88,9 @@ public class SisPersonLibImgBo extends BaseEntity { * 图片MD5 */ private String imgMd5Value; + + /** + * 租户id + */ + private String tenantId; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java index 46a2adfb..19723b59 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java @@ -4,6 +4,7 @@ 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.json.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboService; @@ -14,12 +15,18 @@ import org.dromara.sis.domain.vo.SisAccessControlVo; import org.dromara.sis.domain.vo.SisAuthGroupRefVo; import org.dromara.sis.domain.vo.SisAuthRecordVo; import org.dromara.sis.domain.vo.SisPersonLibImgVo; +import org.dromara.sis.rocketmq.RocketMqConstants; +import org.dromara.sis.rocketmq.producer.ProducerService; import org.dromara.sis.sdk.e8.E8PlatformApi; +import org.dromara.sis.sdk.e8.domain.ApiResp; import org.dromara.sis.sdk.e8.domain.accessControl.req.CustomerAuthAddReq; import org.dromara.sis.sdk.e8.domain.custom.req.CustomAddReq; +import org.dromara.sis.sdk.e8.domain.custom.res.CustomAddRes; import org.dromara.sis.sdk.e8.domain.voucher.req.IssueVoucherReq; +import org.dromara.sis.sdk.e8.domain.voucher.res.IssueVoucherRes; import org.dromara.sis.sdk.huawei.HuaWeiBoxApi; import org.dromara.sis.sdk.huawei.domain.AddHWPersonReq; +import org.dromara.sis.sdk.huawei.domain.HWResult; import org.dromara.sis.service.ISisAccessControlService; import org.dromara.sis.service.ISisAuthGroupRefService; import org.dromara.sis.service.ISisAuthRecordService; @@ -47,6 +54,8 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { private final ISisAuthGroupRefService sisAuthGroupRefService; private final ISisAccessControlService sisAccessControlService; + private final ProducerService producerService; + /** * 人员授权 * @@ -55,7 +64,14 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { */ @Override public Boolean personAuth(RemotePersonAuth personAuth) { - return sisAuthRecordService.insertByPerson(personAuth); + Boolean flag = sisAuthRecordService.insertByPerson(personAuth); + if (!flag) { + JSONObject jsonObject = new JSONObject(); + jsonObject.putOnce("personId", personAuth.getId()); + jsonObject.putOnce("message", "写入授权记录失败!"); + producerService.send(RocketMqConstants.TOPIC, RocketMqConstants.AUTH_MESSAGE, jsonObject.toString()); + } + return flag; } /** @@ -113,24 +129,41 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { } AddHWPersonReq req = new AddHWPersonReq(); - req.setIndex(CodePrefixConstants.PERSON_LIB_IMAGE_CODE_PREFIX + IdUtil.getSnowflakeNextIdStr()); - req.setName(person.getName()); req.setCredentialType("5"); - req.setCredentialNumber(vo.getId().toString()); - req.setGender(person.getSex() == 1 ? "0" : person.getSex() == 2 ? "1" : "-1"); - - ArrayList pictures = new ArrayList<>(); - pictures.add(Base64.getEncoder().encodeToString(imgByte)); - req.setPictures(pictures); - - pId = huaWeiBoxApi.addPerson(List.of(req)); + req.setName(person.getName()); + pId = addHuaWeiBox(req, person.getId().toString(), imgByte); } catch (Exception e) { - log.info("同步华为盒子失败:{}----{}", person.getName(), person.getId()); + JSONObject jsonObject = new JSONObject(); + jsonObject.putOnce("message", e.getMessage()); + jsonObject.putOnce("personId", person.getId()); + producerService.send(RocketMqConstants.TOPIC, RocketMqConstants.AUTH_MESSAGE, jsonObject.toString()); + log.info("{}:{}----{}", e.getMessage(), person.getName(), person.getId()); return null; } return pId; } + public Long addHuaWeiBox(AddHWPersonReq req, String id, byte[] imgByte) { + req.setCredentialNumber(id); + req.setIndex(CodePrefixConstants.PERSON_LIB_IMAGE_CODE_PREFIX + IdUtil.getSnowflakeNextIdStr()); + + ArrayList pictures = new ArrayList<>(); + pictures.add(Base64.getEncoder().encodeToString(imgByte)); + req.setPictures(pictures); + + HWResult result = huaWeiBoxApi.addPerson(List.of(req)); + Assert.notNull(result, "调用华为盒子新增图片出错"); + if (result.getCode() != 200) { + JSONObject jsonObject = new JSONObject(); + jsonObject.putOnce("personId", id); + jsonObject.putOnce("message", result.getMessage()); + producerService.send(RocketMqConstants.TOPIC, RocketMqConstants.AUTH_MESSAGE, jsonObject.toString()); + return null; + } else { + return result.getData(); + } + } + /** * 更新人像信息 * @@ -159,18 +192,20 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { try { log.info("e8平台上传照片"); - String e8ImgUrl = e8PlatformApi.uploadFace(imgByte); - Assert.notNull(e8ImgUrl, "图片上传E8平台失败:" + person.getName() + "----" + person.getId()); + ApiResp imgResult = e8PlatformApi.uploadFace(imgByte); + Assert.isTrue(imgResult.getSuccess(), "图片上传E8平台失败:" + imgResult.getMessage() + "--" + person.getName() + "----" + person.getId()); log.info("e8平台上传照片完成"); + String e8ImgUrl = imgResult.getResult(); count++; // 图片上传完成步进器+1 log.info("e8同步新建人员"); CustomAddReq req = new CustomAddReq(); req.setName(person.getName()); req.setGender(person.getSex() != 1 ? 0 : 1); - e8Id = e8PlatformApi.addCustomer(req).getId(); - Assert.notNull(e8Id, "e8同步新建人员失败:" + person.getName() + "----" + person.getId()); + ApiResp cusResult = e8PlatformApi.addCustomer(req); + Assert.isTrue(cusResult.getSuccess(), "e8同步新建人员失败:" + cusResult.getMessage() + "--" + person.getName() + "----" + person.getId()); log.info("e8同步新建人员完成"); + e8Id = cusResult.getResult().getId(); count++; // 新增人员完成步进器+1 log.info("e8平台开始发行凭证"); @@ -179,8 +214,8 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { voucherReq.setPersonID(e8Id); voucherReq.setTxtData(e8ImgUrl); voucherReq.setCardType(34); - Long voucherId = e8PlatformApi.issueVoucher(voucherReq); - Assert.notNull(voucherId, "e8平台发行凭证失败:" + person.getName() + "----" + person.getId()); + ApiResp voucherResult = e8PlatformApi.issueVoucher(voucherReq); + Assert.isTrue(voucherResult.getSuccess(), "e8平台发行凭证失败:" + voucherResult.getMessage() + "--" + person.getName() + "----" + person.getId()); log.info("e8平台发行凭证成功"); count++; // 发行凭证完成步进器+1 @@ -206,13 +241,17 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { authReq.setAuthData(list); log.info("e8平台开始授权"); - Boolean flag = e8PlatformApi.addCustomerAuth(authReq); - Assert.isTrue(flag, "E8平台授权失败:" + person.getName() + "----" + person.getId()); + ApiResp flag = e8PlatformApi.addCustomerAuth(authReq); + Assert.isTrue(flag.getSuccess(), "E8平台授权失败:" + flag.getMessage() + "--" + person.getName() + "----" + person.getId()); log.info("E8平台授权完成!"); count++; // 授权完成步进器+1 } } catch (Exception e) { log.info(e.getMessage()); + JSONObject jsonObject = new JSONObject(); + jsonObject.putOnce("personId", person.getId()); + jsonObject.putOnce("message", e.getMessage()); + producerService.send(RocketMqConstants.TOPIC, RocketMqConstants.AUTH_MESSAGE, jsonObject.toString()); return null; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteVisitorServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteVisitorServiceImpl.java index 7903b218..e38ef7b6 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteVisitorServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteVisitorServiceImpl.java @@ -51,7 +51,7 @@ public class RemoteVisitorServiceImpl implements RemoteVisitorService { byte[] zipByte = imageUtil.compressImageToRequirements(imgByte); - imgUrl = e8PlatformApi.uploadFace(zipByte); + imgUrl = e8PlatformApi.uploadFace(zipByte).getResult(); Assert.notNull(imgUrl, "e8平台上传访客照片失败"); } VisitorAddReq req = new VisitorAddReq(); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/RocketMqConstants.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/RocketMqConstants.java index 8d055e38..48c8b6aa 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/RocketMqConstants.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/RocketMqConstants.java @@ -29,4 +29,6 @@ public interface RocketMqConstants { String HIGH_DENSITY = "HIGH_DENSITY_REPORT"; // 停车上报 String PARKING_ALARM = "PARKING_ALARM_REPORT"; + // 授权消息上报 + String AUTH_MESSAGE = "AUTH_MESSAGE_REPORT"; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/producer/ProducerService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/producer/ProducerService.java new file mode 100644 index 00000000..f2a92cf5 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/producer/ProducerService.java @@ -0,0 +1,37 @@ +package org.dromara.sis.rocketmq.producer; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.common.message.Message; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.springframework.stereotype.Component; + +/** + * @author lsm + * @apiNote ProducerService + * @since 2025/9/9 + */ +@Slf4j +@Component +public class ProducerService { + + @Resource + private RocketMQTemplate rocketMqTemplate; + + /** + * 向mq写入消息 + * + * @param topic 消息topic + * @param tag 消息tag + * @param msg 消息 + */ + public void send(String topic, String tag, String msg) { + Message message = new Message(topic, tag, msg.getBytes()); + try { + rocketMqTemplate.getProducer().send(message); + log.info("发送RocketMQ消息成功"); + } catch (Exception e) { + log.error("发送RocketMQ消息失败", e); + } + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/E8PlatformApi.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/E8PlatformApi.java index 677d2096..fe71a556 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/E8PlatformApi.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/E8PlatformApi.java @@ -21,9 +21,11 @@ import org.dromara.sis.sdk.e8.domain.lift.req.LiftAddReq; import org.dromara.sis.sdk.e8.domain.lift.req.LiftUpdateReq; import org.dromara.sis.sdk.e8.domain.lift.res.LiftFindRes; import org.dromara.sis.sdk.e8.domain.visitors.req.VisitorAddReq; +import org.dromara.sis.sdk.e8.domain.visitors.res.VisitorAddRes; import org.dromara.sis.sdk.e8.domain.voucher.req.ChangeCardReq; import org.dromara.sis.sdk.e8.domain.voucher.req.IssueVoucherReq; import org.dromara.sis.sdk.e8.domain.voucher.req.OperateVoucherReq; +import org.dromara.sis.sdk.e8.domain.voucher.res.IssueVoucherRes; import java.util.List; @@ -42,7 +44,7 @@ public interface E8PlatformApi { * @param findReq 传参 * @return CustomFindRes */ - CustomFindRes findCustomer(CustomFindReq findReq); + ApiResp findCustomer(CustomFindReq findReq); /** * 人员信息分页查询 @@ -50,31 +52,31 @@ public interface E8PlatformApi { * @param dto 传参 * @return TableDataInfo */ - TableDataInfo findCustomerList(QueryDto dto); + ApiResp> findCustomerList(QueryDto dto); /** * 新增人员信息 * * @param addReq 传参 - * @return CustomAddRes + * @return ApiResp */ - CustomAddRes addCustomer(CustomAddReq addReq); + ApiResp addCustomer(CustomAddReq addReq); /** * 人员信息修改 * * @param updateReq 传参 - * @return Boolean + * @return ApiResp */ - Boolean updateCustomer(CustomUpdateReq updateReq); + ApiResp updateCustomer(CustomUpdateReq updateReq); /** * 删除人员信息 * * @param id 传参 - * @return Boolean + * @return ApiResp */ - Boolean deleteCustomer(Long id); + ApiResp deleteCustomer(Long id); //***************************************门禁信息接口******************************************* @@ -84,7 +86,7 @@ public interface E8PlatformApi { * @param id 入参 * @return DoorDeviceFindRes */ - DoorDeviceFindRes findDoorDevice(Long id); + ApiResp findDoorDevice(Long id); /** * 门禁信息分页查询 @@ -92,7 +94,7 @@ public interface E8PlatformApi { * @param dto 入参 * @return IPage */ - TableDataInfo findDoorDeviceList(QueryDto dto); + ApiResp> findDoorDeviceList(QueryDto dto); /** * 新增门禁信息 @@ -100,7 +102,7 @@ public interface E8PlatformApi { * @param addReq 入参 * @return DoorDeviceAddRes */ - DoorDeviceAddRes addDoorDevice(DoorDeviceAddReq addReq); + ApiResp addDoorDevice(DoorDeviceAddReq addReq); /** * 门禁信息修改 @@ -108,7 +110,7 @@ public interface E8PlatformApi { * @param updateReq 入参 * @return DoorDeviceUpdateRes */ - Boolean updateDoorDevice(DoorDeviceUpdateReq updateReq); + ApiResp updateDoorDevice(DoorDeviceUpdateReq updateReq); /** * 删除门禁信息 @@ -116,14 +118,14 @@ public interface E8PlatformApi { * @param id 入参 * @return Boolean */ - Boolean deleteDoorDevice(Long id); + ApiResp deleteDoorDevice(Long id); /** * 分页获取授权门信息 * - * @return TableDataInfo + * @return List */ - List getPageAuthDoorDeviceList(); + ApiResp> getPageAuthDoorDeviceList(); /** * 远程开门 @@ -131,7 +133,7 @@ public interface E8PlatformApi { * @param req 传参 * @return Boolean */ - Boolean remoteOpenDoor(RemoteOpenDoorReq req); + ApiResp remoteOpenDoor(RemoteOpenDoorReq req); /** @@ -140,7 +142,7 @@ public interface E8PlatformApi { * @param dto 传参 * @return IPage */ - TableDataInfo getPageAccessRecordList(QueryDto dto); + ApiResp> getPageAccessRecordList(QueryDto dto); /** * 人员授权 @@ -148,7 +150,7 @@ public interface E8PlatformApi { * @param req 传参 * @return Boolean */ - Boolean addCustomerAuth(CustomerAuthAddReq req); + ApiResp addCustomerAuth(CustomerAuthAddReq req); /** * 获取人员权限分页列表 @@ -156,7 +158,7 @@ public interface E8PlatformApi { * @param dto 传参 * @return TableDataInfo */ - TableDataInfo getPageCustomerAuth(QueryDto dto); + ApiResp> getPageCustomerAuth(QueryDto dto); //***************************************电梯信息接口******************************************* @@ -166,7 +168,7 @@ public interface E8PlatformApi { * @param dto 传参 * @return TableDataInfo */ - TableDataInfo getPageList(QueryDto dto); + ApiResp> getPageList(QueryDto dto); /** * 查询电梯楼层 @@ -174,7 +176,7 @@ public interface E8PlatformApi { * @param id 传参 * @return LiftFindRes */ - LiftFindRes getLiftFloor(Long id); + ApiResp getLiftFloor(Long id); /** * 添加电梯 @@ -182,7 +184,7 @@ public interface E8PlatformApi { * @param addReq 传参 * @return Boolean */ - Boolean addLift(LiftAddReq addReq); + ApiResp addLift(LiftAddReq addReq); /** * 修改电梯信息 @@ -190,7 +192,7 @@ public interface E8PlatformApi { * @param updateReq 传参 * @return Boolean */ - Boolean updateLift(LiftUpdateReq updateReq); + ApiResp updateLift(LiftUpdateReq updateReq); /** * 删除电梯信息 @@ -198,7 +200,7 @@ public interface E8PlatformApi { * @param id 传参 * @return Boolean */ - Boolean deleteLift(Integer id); + ApiResp deleteLift(Integer id); //***************************************凭证信息接口******************************************* @@ -208,7 +210,7 @@ public interface E8PlatformApi { * @param req 凭证数据 * @return Boolean */ - Long issueVoucher(IssueVoucherReq req); + ApiResp issueVoucher(IssueVoucherReq req); /** * 操作凭证 @@ -216,7 +218,7 @@ public interface E8PlatformApi { * @param req 入参 * @return Boolean */ - Boolean operateVoucher(OperateVoucherReq req); + ApiResp operateVoucher(OperateVoucherReq req); /** * 换卡补卡 @@ -224,7 +226,7 @@ public interface E8PlatformApi { * @param req 入参 * @return Boolean */ - Boolean changeCard(ChangeCardReq req); + ApiResp changeCard(ChangeCardReq req); /** * 上传人脸 @@ -232,7 +234,7 @@ public interface E8PlatformApi { * @param imageByte 入参 * @return imageUrl 人脸图片地址 */ - String uploadFace(byte[] imageByte); + ApiResp uploadFace(byte[] imageByte); //***************************************访客信息接口******************************************* @@ -242,7 +244,7 @@ public interface E8PlatformApi { * @param req 入参 * @return ApiResp */ - ApiResp addVisitor(VisitorAddReq req); + ApiResp addVisitor(VisitorAddReq req); /** * 获取访客二维码 @@ -250,5 +252,5 @@ public interface E8PlatformApi { * @param ids 访客ids * @return ApiResp */ - ApiResp getVisitorQrCode(List ids); + ApiResp getVisitorQrCode(List ids); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/ApiResp.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/ApiResp.java index 7a9adb21..cf72c342 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/ApiResp.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/ApiResp.java @@ -10,7 +10,7 @@ import lombok.Data; */ @Data @AllArgsConstructor -public class ApiResp { +public class ApiResp { /** * success为false时返回错误信息 */ @@ -24,7 +24,7 @@ public class ApiResp { /** * 返回处理结果(数据由具体接口决定) */ - private Object result; + private T result; /** * true表示成功,false表示失败 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/service/E8PlatformApiService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/service/E8PlatformApiService.java index ca8c1d61..18dbd285 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/service/E8PlatformApiService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/service/E8PlatformApiService.java @@ -2,6 +2,7 @@ package org.dromara.sis.sdk.e8.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.lang.TypeReference; +import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -31,6 +32,7 @@ import org.dromara.sis.sdk.e8.domain.lift.req.LiftFindReq; import org.dromara.sis.sdk.e8.domain.lift.req.LiftUpdateReq; import org.dromara.sis.sdk.e8.domain.lift.res.LiftFindRes; import org.dromara.sis.sdk.e8.domain.visitors.req.VisitorAddReq; +import org.dromara.sis.sdk.e8.domain.visitors.res.VisitorAddRes; import org.dromara.sis.sdk.e8.domain.voucher.req.ChangeCardReq; import org.dromara.sis.sdk.e8.domain.voucher.req.IssueVoucherReq; import org.dromara.sis.sdk.e8.domain.voucher.req.OperateVoucherReq; @@ -58,7 +60,68 @@ public class E8PlatformApiService implements E8PlatformApi { @Value("${E8Plat.imgUrl}") private String imgUrl; - private final static String URL = "http://192.168.24.8:50030"; + private final static String E8_BASE_URL = "http://192.168.24.8:50030"; + + /** + * 统一处理API响应 + * + * @param result JSON字符串响应 + * @param clazz 目标类型 + * @param 泛型类型 + * @return ApiResp + */ + private ApiResp handleApiResponse(String result, Class clazz) { + if (result == null) { + return new ApiResp<>("E8服务器内部错误", null, null, false, 500); + } + + JSONObject apiResp = JSONUtil.parseObj(result); + T data = null; + if (apiResp.containsKey("result") && clazz != Void.class) { + data = JSONUtil.toBean(apiResp.getStr("result"), clazz); + } + + return new ApiResp<>( + apiResp.getStr("message"), + apiResp.getLong("sessionId"), + data, + apiResp.getBool("success"), + apiResp.getInt("code") + ); + } + + /** + * 统一处理分页API响应 + * + * @param result JSON字符串响应 + * @param clazz 列表元素类型 + * @param 泛型类型 + * @return ApiResp> + */ + private ApiResp> handlePagedApiResponse(String result, Class clazz) { + if (result == null) { + return new ApiResp<>("E8服务器内部错误", null, null, false, 500); + } + + JSONObject apiResp = JSONUtil.parseObj(result); + Map resultMap = JSONUtil.toBean(apiResp.getStr("result"), new TypeReference>() { + }, false); + + TableDataInfo tableDataInfo = new TableDataInfo<>(); + tableDataInfo.setTotal(Long.parseLong(resultMap.get("total").toString())); + tableDataInfo.setRows(JSONUtil.toList(JSONUtil.toJsonStr(resultMap.get("item")), clazz)); + tableDataInfo.setCode(200); + tableDataInfo.setMsg("查询成功"); + + return new ApiResp<>( + apiResp.getStr("message"), + apiResp.getLong("sessionId"), + tableDataInfo, + apiResp.getBool("success"), + apiResp.getInt("code") + ); + } + //***************************************客户信息接口******************************************* private final static String CUSTOMER_GET_PAGE_LIST = "/api/E8/customer/get-page-list"; @@ -74,22 +137,12 @@ public class E8PlatformApiService implements E8PlatformApi { * @return CustomerInfo */ @Override - public CustomFindRes findCustomer(CustomFindReq findReq) { + public ApiResp findCustomer(CustomFindReq findReq) { // 将查询请求对象转换为参数映射 Map params = BeanUtil.beanToMap(findReq); - // 调用API接口获取客户信息 - ApiResp apiResp = e8ApiUtil.doPost(params, CUSTOMER_GET_FIRST_OR_DEFAULT); - - // 检查API调用是否成功 - if (!apiResp.getSuccess()) { - log.error("E8查询人员信息失败 errorMsg:{}", apiResp); - // 如果API调用失败,返回null - return null; - } - - // 将API响应结果转换为CustomFindRes对象并返回 - return JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), CustomFindRes.class); + String result = e8ApiUtil.doPost(params, CUSTOMER_GET_FIRST_OR_DEFAULT); + return handleApiResponse(result, CustomFindRes.class); } /** @@ -99,7 +152,7 @@ public class E8PlatformApiService implements E8PlatformApi { * @return IPage */ @Override - public TableDataInfo findCustomerList(QueryDto dto) { + public ApiResp> findCustomerList(QueryDto dto) { // 创建参数映射,用于存储HTTP请求的参数 Map params = new HashMap<>(); // 添加分页参数:当前页码和最大结果数量 @@ -108,53 +161,25 @@ public class E8PlatformApiService implements E8PlatformApi { // 将查询条件对象转换为JSON字符串,并再次转换为Map对象,然后添加到参数映射中 params.put("queryDto", JSONUtil.toBean(JSONUtil.toJsonStr(dto.getQueryDto()), CustomFindReq.class)); - // 调用API工具类的POST方法,发送请求到第三方API,并获取响应结果 - ApiResp apiResp = e8ApiUtil.doPost(params, CUSTOMER_GET_PAGE_LIST); - - - if (!apiResp.getSuccess()) { - log.error("E8人员信息分页查询 errorMsg:{}", apiResp); - // 如果API响应不成功,返回null - return null; - } - - // 将API响应结果转换为Map对象,以便于后续处理 - Map result = JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), new TypeReference<>() { - }, false); - // 创建一个分页对象,用于存储客户信息列表和分页数据 - TableDataInfo tableDataInfo = new TableDataInfo<>(); - // 设置总记录数 - tableDataInfo.setTotal(Long.parseLong(result.get("total").toString())); - // 将API响应结果中的客户信息列表转换为CustomFindRes对象列表,并设置到分页对象中 - tableDataInfo.setRows(JSONUtil.toList(JSONUtil.toJsonStr(result.get("item")), CustomFindRes.class)); - - // 返回分页对象 - return tableDataInfo; + // 调用API接口获取人员分页信息 + String result = e8ApiUtil.doPost(params, CUSTOMER_GET_PAGE_LIST); + return handlePagedApiResponse(result, CustomFindRes.class); } /** * 新增人员信息 * * @param addReq 传参 - * @return Boolean + * @return ApiResp */ @Override - public CustomAddRes addCustomer(CustomAddReq addReq) { + public ApiResp addCustomer(CustomAddReq addReq) { // 将添加请求对象转换为Map对象,以便后续API调用 Map params = BeanUtil.beanToMap(addReq); // 执行客户创建API调用,并获取API响应对象 - ApiResp apiResp = e8ApiUtil.doPost(params, CUSTOMER_CREATE); - - // 检查API调用是否成功 - if (!apiResp.getSuccess()) { - log.error("E8新增人员信息失败 errorMsg:{}", apiResp); - // 如果API调用失败,返回null - return null; - } - - // 返回API调用是否成功的标志 - return JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), CustomAddRes.class); + String result = e8ApiUtil.doPost(params, CUSTOMER_CREATE); + return handleApiResponse(result, CustomAddRes.class); } /** @@ -164,7 +189,7 @@ public class E8PlatformApiService implements E8PlatformApi { * @return Boolean */ @Override - public Boolean updateCustomer(CustomUpdateReq updateReq) { + public ApiResp updateCustomer(CustomUpdateReq updateReq) { // 根据更新请求构建API URL String api = CUSTOMER_UPDATE.replace("{id}", updateReq.getId().toString()); @@ -172,32 +197,24 @@ public class E8PlatformApiService implements E8PlatformApi { Map params = BeanUtil.beanToMap(updateReq); // 调用API工具类发送POST请求,并获取API响应对象 - ApiResp apiResp = e8ApiUtil.doPost(params, api); - - if (!apiResp.getSuccess()) log.error("E8人员信息修改失败 errorMsg:{}", apiResp); - - // 返回API调用是否成功的标志 - return apiResp.getSuccess(); + String result = e8ApiUtil.doPost(params, api); + return handleApiResponse(result, Void.class); } /** * 删除人员信息 * * @param id 传参 - * @return Boolean + * @return ApiResp */ @Override - public Boolean deleteCustomer(Long id) { + public ApiResp deleteCustomer(Long id) { // 构造删除客户的API请求URL String api = CUSTOMER_DELETE.replace("{id}", id.toString()); // 调用API工具类的 doGetOrDel 方法发送GET或DELETE请求,并获取响应结果 - ApiResp apiResp = e8ApiUtil.doGetOrDel(api, null, true); - - if (!apiResp.getSuccess()) log.error("E8删除人员信息失败 errorMsg:{}", apiResp); - - // 返回API请求是否成功的标志 - return apiResp.getSuccess(); + String result = e8ApiUtil.doGetOrDel(api, null, true); + return handleApiResponse(result, Void.class); } //***************************************门禁信息接口******************************************* @@ -220,23 +237,13 @@ public class E8PlatformApiService implements E8PlatformApi { * @return DoorDeviceFindRes */ @Override - public DoorDeviceFindRes findDoorDevice(Long id) { - + public ApiResp findDoorDevice(Long id) { // 使用给定的ID替换API模板中的{id}占位符 String api = DOOR_DEVICE_GET_FIRST_OR_DEFAULT.replace("{id}", id.toString()); // 调用E8 API工具类的doGetOrDel方法发送GET请求,并获取响应结果 - ApiResp apiResp = e8ApiUtil.doGetOrDel(api, null, false); - - // 检查API响应是否成功 - if (!apiResp.getSuccess()) { - log.error("查询E8门禁信息失败 errorMsg:{}", apiResp); - // 如果响应不成功,则返回null - return null; - } - - // 将API响应结果转换为指定的Java对象,并返回该对象 - return JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), DoorDeviceFindRes.class); + String result = e8ApiUtil.doGetOrDel(api, null, false); + return handleApiResponse(result, DoorDeviceFindRes.class); } /** @@ -246,7 +253,7 @@ public class E8PlatformApiService implements E8PlatformApi { * @return IPage */ @Override - public TableDataInfo findDoorDeviceList(QueryDto dto) { + public ApiResp> findDoorDeviceList(QueryDto dto) { // 创建一个参数映射,用于存储API请求所需的参数 Map params = new HashMap<>(); // 将分页索引和最大结果数放入参数映射中 @@ -256,48 +263,24 @@ public class E8PlatformApiService implements E8PlatformApi { params.put("QueryDto", JSONUtil.toBean(JSONUtil.toJsonStr(dto.getQueryDto()), DoorDeviceFindReq.class)); // 调用第三方API,获取门禁设备分页列表 - ApiResp apiResp = e8ApiUtil.doPost(params, DOOR_DEVICE_GET_PAGE_LIST); - - // 如果API调用不成功,则返回null - if (!apiResp.getSuccess()) { - log.error("分页查询E8门禁信息失败 errorMsg:{}", apiResp); - // 如果响应不成功,则返回null - return null; - } - // 将API响应结果转换为Map对象,以便后续处理 - Map result = JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), new TypeReference<>() { - }, false); - // 创建一个分页对象,用于存储处理后的门禁设备信息 - TableDataInfo tableDataInfo = new TableDataInfo<>(); - // 设置分页对象的总记录数 - tableDataInfo.setTotal(Long.parseLong(result.get("total").toString())); - // 将API响应结果中的门禁设备信息列表转换为DoorDeviceFindRes对象列表,并设置到分页对象中 - tableDataInfo.setRows(JSONUtil.toList(JSONUtil.toJsonStr(result.get("item")), DoorDeviceFindRes.class)); - // 返回处理后的分页对象 - return tableDataInfo; + String result = e8ApiUtil.doPost(params, DOOR_DEVICE_GET_PAGE_LIST); + return handlePagedApiResponse(result, DoorDeviceFindRes.class); } /** * 新增门禁信息 * * @param addReq 传参 - * @return Boolean + * @return DoorDeviceAddRes */ @Override - public DoorDeviceAddRes addDoorDevice(DoorDeviceAddReq addReq) { + public ApiResp addDoorDevice(DoorDeviceAddReq addReq) { // 将DoorDeviceAddReq转为Map对象,以便作为API请求的参数 Map params = BeanUtil.beanToMap(addReq); // 调用第三方API进行门禁设备创建,并传入转换后的参数 - ApiResp apiResp = e8ApiUtil.doPost(params, DOOR_DEVICE_CREATE); - - if (!apiResp.getSuccess()) { - log.error("新增E8门禁信息,errorMsg:{}", apiResp); - // 如果响应不成功,则返回null - return null; - } - - return JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), DoorDeviceAddRes.class); + String result = e8ApiUtil.doPost(params, DOOR_DEVICE_CREATE); + return handleApiResponse(result, DoorDeviceAddRes.class); } /** @@ -307,8 +290,7 @@ public class E8PlatformApiService implements E8PlatformApi { * @return DoorDeviceUpdateRes */ @Override - public Boolean updateDoorDevice(DoorDeviceUpdateReq updateReq) { - + public ApiResp updateDoorDevice(DoorDeviceUpdateReq updateReq) { // 构造门设备更新API的URL String api = DOOR_DEVICE_UPDATE.replace("{id}", updateReq.getId().toString()); @@ -316,11 +298,8 @@ public class E8PlatformApiService implements E8PlatformApi { Map params = BeanUtil.beanToMap(updateReq); // 调用API进行门设备信息更新 - ApiResp apiResp = e8ApiUtil.doPost(params, api); - - if (!apiResp.getSuccess()) log.error("修改E8门禁信息,errorMsg:{}", apiResp); - - return apiResp.getSuccess(); + String result = e8ApiUtil.doPost(params, api); + return handleApiResponse(result, Void.class); } /** @@ -330,18 +309,13 @@ public class E8PlatformApiService implements E8PlatformApi { * @return Boolean */ @Override - public Boolean deleteDoorDevice(Long id) { - + public ApiResp deleteDoorDevice(Long id) { // 构造删除门设备的API路径,使用设备ID替换占位符 String api = DOOR_DEVICE_DELETE.replace("{id}", id.toString()); // 调用E8 API工具类进行HTTP DELETE请求,参数为构造的API路径和null(因为DELETE请求通常不需要请求体) - ApiResp apiResp = e8ApiUtil.doGetOrDel(api, null, true); - - if (!apiResp.getSuccess()) log.error("删除E8门禁信息,errorMsg:{}", apiResp); - - // 返回API响应的成功标志 - return apiResp.getSuccess(); + String result = e8ApiUtil.doGetOrDel(api, null, true); + return handleApiResponse(result, Void.class); } /** @@ -349,7 +323,7 @@ public class E8PlatformApiService implements E8PlatformApi { * * @return List */ - public List getPageAuthDoorDeviceList() { + public ApiResp> getPageAuthDoorDeviceList() { Map queryDto = new HashMap<>(); queryDto.put("type", -1); queryDto.put("matchString", ""); @@ -360,19 +334,9 @@ public class E8PlatformApiService implements E8PlatformApi { params.put("MaxResultCount", 100000); params.put("QueryDto", queryDto); - ApiResp apiResp = e8ApiUtil.doPost(params, AUTH_DOOR_DEVICE_GET_LIST); - - // 如果API调用不成功,则返回null - if (!apiResp.getSuccess()) { - log.error("分页获取授权门信息失败 errorMsg:{}", apiResp); - // 如果响应不成功,则返回null - return null; - } - // 将API响应结果转换为Map对象,以便后续处理 - Map result = JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), new TypeReference<>() { - }, false); - // 返回list - return JSONUtil.toList(JSONUtil.toJsonStr(result.get("item")), AuthDoorDeviceFindRes.class); + String result = e8ApiUtil.doPost(params, AUTH_DOOR_DEVICE_GET_LIST); + ApiResp> resp = handlePagedApiResponse(result, AuthDoorDeviceFindRes.class); + return new ApiResp<>(resp.getMessage(), resp.getSessionId(), resp.getResult().getRows(), resp.getSuccess(), resp.getCode()); } /** @@ -382,17 +346,13 @@ public class E8PlatformApiService implements E8PlatformApi { * @return Boolean */ @Override - public Boolean remoteOpenDoor(RemoteOpenDoorReq req) { + public ApiResp remoteOpenDoor(RemoteOpenDoorReq req) { // 将RemoteOpenDoorReq转为Map对象,以便作为API请求的参数 Map params = BeanUtil.beanToMap(req); // 调用第三方API进行开门操作,传入处理后的参数和指定的API端点 - ApiResp apiResp = e8ApiUtil.doPost(params, REMOTE_OPEN_DOOR); - - if (!apiResp.getSuccess()) log.error("调用E8远程开门失败,errorMsg:{}", apiResp); - - // 返回API调用是否成功的结果 - return apiResp.getSuccess(); + String result = e8ApiUtil.doPost(params, REMOTE_OPEN_DOOR); + return handleApiResponse(result, Void.class); } /** @@ -402,7 +362,7 @@ public class E8PlatformApiService implements E8PlatformApi { * @return IPage */ @Override - public TableDataInfo getPageAccessRecordList(QueryDto dto) { + public ApiResp> getPageAccessRecordList(QueryDto dto) { // 创建一个参数映射,用于存储API请求的参数 Map params = new HashMap<>(); // 将分页索引和最大结果数放入参数映射中 @@ -412,35 +372,36 @@ public class E8PlatformApiService implements E8PlatformApi { params.put("queryDto", JSONUtil.toBean(JSONUtil.toJsonStr(dto.getQueryDto()), AccessRecordFindReq.class)); // 调用API工具类的POST方法,传入参数和API路径,获取API响应对象 - ApiResp apiResp = e8ApiUtil.doPost(params, GET_PAGE_ACCESS_RECORD_PAGE_LIST); + String result = e8ApiUtil.doPost(params, GET_PAGE_ACCESS_RECORD_PAGE_LIST); // 如果API响应不成功,则返回null - if (!apiResp.getSuccess()) { - log.error("调用E8获取通行记录分页列表失败,errorMsg:{}", apiResp); - return null; + if (result == null) { + return new ApiResp<>("e8服务器内部错误", null, null, false, 500); } + + JSONObject apiResp = JSONUtil.parseObj(result); // 将API响应的结果转换为JSON字符串,再转换为Map对象 - Map result = JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), new TypeReference<>() { + Map resultMap = JSONUtil.toBean(apiResp.getStr("result"), new TypeReference<>() { }, false); // 创建一个分页对象,传入分页索引和最大结果数 TableDataInfo tableData = new TableDataInfo<>(); // 从结果映射中获取总记录数,转换为长整型后设置到分页对象中 - tableData.setTotal(Long.parseLong(result.get("total").toString())); + tableData.setTotal(Long.parseLong(resultMap.get("total").toString())); // 从结果映射中获取项目列表,转换为访问记录信息列表后设置到分页对象中 - tableData.setRows(JSONUtil.toList(JSONUtil.toJsonStr(result.get("item")), AccessRecordFindRes.class)); + tableData.setRows(JSONUtil.toList(JSONUtil.toJsonStr(resultMap.get("item")), AccessRecordFindRes.class)); - for (AccessRecordFindRes res : tableData.getRows()){ + for (AccessRecordFindRes res : tableData.getRows()) { if (res.getVoucherUrl() != null && !res.getVoucherUrl().isEmpty()) { - res.setVoucherUrl(res.getVoucherUrl().replace(URL, imgUrl)); + res.setVoucherUrl(res.getVoucherUrl().replace(E8_BASE_URL, imgUrl)); } if (res.getPictureUrl() != null && !res.getPictureUrl().isEmpty()) { - res.setPictureUrl(res.getPictureUrl().replace(URL, imgUrl)); + res.setPictureUrl(res.getPictureUrl().replace(E8_BASE_URL, imgUrl)); } } tableData.setCode(200); tableData.setMsg("查询成功"); // 返回填充了数据的分页对象 - return tableData; + return new ApiResp<>(apiResp.getStr("message"), apiResp.getLong("sessionId"), tableData, apiResp.getBool("success"), apiResp.getInt("code")); } /** @@ -450,17 +411,13 @@ public class E8PlatformApiService implements E8PlatformApi { * @return Boolean */ @Override - public Boolean addCustomerAuth(CustomerAuthAddReq req) { + public ApiResp addCustomerAuth(CustomerAuthAddReq req) { // 创建一个参数映射,用于存储API请求的参数 Map params = BeanUtil.beanToMap(req); // 调用API工具类的POST方法,传入参数和API路径,获取API响应对象 - ApiResp apiResp = e8ApiUtil.doPost(params, PERSON_AUTHORIZATION); - - if (!apiResp.getSuccess()) log.error("调用E8人员授权失败,errorMsg:{}", apiResp); - - // 返回API调用是否成功 - return apiResp.getSuccess(); + String result = e8ApiUtil.doPost(params, PERSON_AUTHORIZATION); + return handleApiResponse(result, Void.class); } /** @@ -470,7 +427,7 @@ public class E8PlatformApiService implements E8PlatformApi { * @return TableDataInfo */ @Override - public TableDataInfo getPageCustomerAuth(QueryDto dto) { + public ApiResp> getPageCustomerAuth(QueryDto dto) { // 创建一个参数映射,用于存储API请求的参数 Map params = new HashMap<>(); // 将分页索引和最大结果数放入参数映射中 @@ -480,24 +437,8 @@ public class E8PlatformApiService implements E8PlatformApi { params.put("queryDto", JSONUtil.toBean(JSONUtil.toJsonStr(dto.getQueryDto()), CustomerAuthFindReq.class)); // 调用API工具类的POST方法,传入参数和API路径,获取API响应对象 - ApiResp apiResp = e8ApiUtil.doPost(params, GET_PAGE_PERSON_AUTHORIZATION_PAGE_LIST); - // 如果API响应不成功,则返回null - if (!apiResp.getSuccess()) { - log.error("调用E8获取人员权限分页列表失败,errorMsg:{}", apiResp); - return null; - } - - // 将API响应的结果转换为JSON字符串,再转换为Map对象 - Map result = JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), new TypeReference<>() { - }, false); - // 创建一个分页对象,传入分页索引和最大结果数 - TableDataInfo tableData = new TableDataInfo<>(); - // 从结果映射中获取总记录数,转换为长整型后设置到分页对象中 - tableData.setTotal(Long.parseLong(result.get("total").toString())); - // 从结果映射中获取项目列表,转换为访问记录信息列表后设置到分页对象中 - tableData.setRows(JSONUtil.toList(JSONUtil.toJsonStr(result.get("item")), CustomerAuthFindRes.class)); - // 返回填充了数据的分页对象 - return tableData; + String result = e8ApiUtil.doPost(params, GET_PAGE_PERSON_AUTHORIZATION_PAGE_LIST); + return handlePagedApiResponse(result, CustomerAuthFindRes.class); } //***************************************电梯信息接口******************************************* @@ -514,7 +455,7 @@ public class E8PlatformApiService implements E8PlatformApi { * @return TableDataInfo */ @Override - public TableDataInfo getPageList(QueryDto dto) { + public ApiResp> getPageList(QueryDto dto) { // 创建一个参数映射,用于存储API请求所需的参数 Map params = new HashMap<>(); // 将分页索引和最大结果数放入参数映射中 @@ -524,24 +465,8 @@ public class E8PlatformApiService implements E8PlatformApi { params.put("queryDto", JSONUtil.toBean(JSONUtil.toJsonStr(dto.getQueryDto()), LiftFindReq.class)); // 调用E8 API工具类的POST方法,传入参数和API路径,获取API响应 - ApiResp apiResp = e8ApiUtil.doPost(params, GET_PAGE_LIST); - // 如果API响应不成功,则返回null - if (!apiResp.getSuccess()) { - return null; - } - - // 将API响应的结果转换为一个Map对象 - Map result = JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), new TypeReference<>() { - }, false); - // 创建一个分页对象,传入分页索引和最大结果数 - TableDataInfo tableDataInfo = new TableDataInfo<>(); - // 设置分页对象的总记录数 - tableDataInfo.setTotal(Long.parseLong(result.get("total").toString())); - // 将结果中的项转换为LiftFindRes列表,并设置为分页对象的记录 - tableDataInfo.setRows(JSONUtil.toList(JSONUtil.toJsonStr(result.get("item")), LiftFindRes.class)); - - // 返回填充了数据的分页对象 - return tableDataInfo; + String result = e8ApiUtil.doPost(params, GET_PAGE_LIST); + return handlePagedApiResponse(result, LiftFindRes.class); } /** @@ -551,20 +476,14 @@ public class E8PlatformApiService implements E8PlatformApi { * @return LiftFindRes */ @Override - public LiftFindRes getLiftFloor(Long id) { + public ApiResp getLiftFloor(Long id) { // 构造请求URL,其中{id}将被liftInfo的ID替换 String url = GET_LIFT_FLOOR.replace("{id}", id.toString()); // 调用API接口,获取电梯信息 - ApiResp apiResp = e8ApiUtil.doPost(new HashMap<>(), url); - // 如果API调用不成功,则返回null - if (!apiResp.getSuccess()) { - return null; - } - - // 将API响应结果转换为LiftFindRes对象,并返回 - return JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), LiftFindRes.class); + String result = e8ApiUtil.doPost(new HashMap<>(), url); + return handleApiResponse(result, LiftFindRes.class); } /** @@ -574,15 +493,13 @@ public class E8PlatformApiService implements E8PlatformApi { * @return Boolean */ @Override - public Boolean addLift(LiftAddReq addReq) { + public ApiResp addLift(LiftAddReq addReq) { // 将添加请求对象转换为Map对象,便于后续操作 Map params = BeanUtil.beanToMap(addReq); // 调用第三方API进行电梯添加操作,并获取API响应结果 - ApiResp apiResp = e8ApiUtil.doPost(params, LIFT_ADD); - - // 返回API操作是否成功的标志 - return apiResp.getSuccess(); + String result = e8ApiUtil.doPost(params, LIFT_ADD); + return handleApiResponse(result, Void.class); } /** @@ -592,19 +509,16 @@ public class E8PlatformApiService implements E8PlatformApi { * @return Boolean */ @Override - public Boolean updateLift(LiftUpdateReq updateReq) { + public ApiResp updateLift(LiftUpdateReq updateReq) { // 根据LiftUpdateReq对象中的ID生成请求URL String url = LIFT_UPDATE.replace("{id}", updateReq.getId().toString()); // 将LiftUpdateReq对象转换为Map类型,以便于API请求参数的处理 Map params = BeanUtil.beanToMap(updateReq); - // 调用E8 API进行POST请求,并返回API响应对象 - ApiResp apiResp = e8ApiUtil.doPost(params, url); - - // 返回API调用是否成功的标志 - return apiResp.getSuccess(); + String result = e8ApiUtil.doPost(params, url); + return handleApiResponse(result, Void.class); } /** @@ -614,16 +528,14 @@ public class E8PlatformApiService implements E8PlatformApi { * @return Boolean */ @Override - public Boolean deleteLift(Integer id) { + public ApiResp deleteLift(Integer id) { // 构造删除电梯的API请求URL,使用id替换模板中的{id}占位符 String url = LIFT_DELETE.replace("{id}", id.toString()); // 调用e8ApiUtils工具类执行DELETE请求,并获取API响应结果 - ApiResp apiResp = e8ApiUtil.doGetOrDel(url, null, true); - - // 返回API响应中的成功标志,表示删除操作是否成功 - return apiResp.getSuccess(); + String result = e8ApiUtil.doGetOrDel(url, null, true); + return handleApiResponse(result, Void.class); } //***************************************凭证信息接口******************************************* @@ -638,21 +550,13 @@ public class E8PlatformApiService implements E8PlatformApi { * @return 是否成功 */ @Override - public Long issueVoucher(IssueVoucherReq req) { + public ApiResp issueVoucher(IssueVoucherReq req) { // 封装入参 Map params = BeanUtil.beanToMap(req); // 调用API - ApiResp apiResp = e8ApiUtil.doPost(params, ISSUANCE_VOUCHER); - - if (!apiResp.getSuccess()) { - log.error("E8发行凭证失败,errorMsg:{}", apiResp); - return null; - } - - IssueVoucherRes res = JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), IssueVoucherRes.class); - - return res.getId(); + String result = e8ApiUtil.doPost(params, ISSUANCE_VOUCHER); + return handleApiResponse(result, IssueVoucherRes.class); } /** @@ -662,16 +566,13 @@ public class E8PlatformApiService implements E8PlatformApi { * @return Boolean */ @Override - public Boolean operateVoucher(OperateVoucherReq req) { + public ApiResp operateVoucher(OperateVoucherReq req) { // 封装入参 Map params = BeanUtil.beanToMap(req); // 调用API - ApiResp apiResp = e8ApiUtil.doPost(params, OPERATE_VOUCHER); - - if (!apiResp.getSuccess()) log.error("E8操作凭证失败,errorMsg:{}", apiResp); - - return apiResp.getSuccess(); + String result = e8ApiUtil.doPost(params, OPERATE_VOUCHER); + return handleApiResponse(result, Void.class); } /** @@ -681,16 +582,13 @@ public class E8PlatformApiService implements E8PlatformApi { * @return Boolean */ @Override - public Boolean changeCard(ChangeCardReq req) { + public ApiResp changeCard(ChangeCardReq req) { // 封装入参 Map params = BeanUtil.beanToMap(req); // 调用API - ApiResp apiResp = e8ApiUtil.doPost(params, CHANGE_CARD); - - if (!apiResp.getSuccess()) log.error("E8换卡补卡失败,errorMsg:{}", apiResp); - - return apiResp.getSuccess(); + String result = e8ApiUtil.doPost(params, CHANGE_CARD); + return handleApiResponse(result, Void.class); } /** @@ -700,16 +598,9 @@ public class E8PlatformApiService implements E8PlatformApi { * @return imageUrl 人脸图片地址 */ @Override - public String uploadFace(byte[] imageByte) { - - ApiResp apiResp = e8ApiUtil.doFaceImgUpload(imageByte); - - if (!apiResp.getSuccess()) { - log.error("上传人脸图片失败,errorMsg:{}", apiResp); - return null; - } - - return apiResp.getMessage(); + public ApiResp uploadFace(byte[] imageByte) { + String result = e8ApiUtil.doFaceImgUpload(imageByte); + return handleApiResponse(result, String.class); } //***************************************电梯信息接口******************************************* @@ -723,22 +614,13 @@ public class E8PlatformApiService implements E8PlatformApi { * @return VisitorAddRes */ @Override - public ApiResp addVisitor(VisitorAddReq req) { + public ApiResp addVisitor(VisitorAddReq req) { // 将添加请求对象转换为Map对象,以便后续API调用 Map params = BeanUtil.beanToMap(req); // 执行客户创建API调用,并获取API响应对象 - ApiResp apiResp = e8ApiUtil.doPost(params, VISITOR_CREATE); - - // 检查API调用是否成功 - if (!apiResp.getSuccess()) { - log.error("E8新增访客信息失败 errorMsg:{}", apiResp); - // 如果API调用失败,返回null - return apiResp; - } - - // 返回API调用是否成功的标志 - return apiResp; + String result = e8ApiUtil.doPost(params, VISITOR_CREATE); + return handleApiResponse(result, VisitorAddRes.class); } /** @@ -748,22 +630,12 @@ public class E8PlatformApiService implements E8PlatformApi { * @return String */ @Override - public ApiResp getVisitorQrCode(List ids) { + public ApiResp getVisitorQrCode(List ids) { Map params = new HashMap<>(); params.put("ids", ids); // 执行客户创建API调用,并获取API响应对象 - ApiResp apiResp = e8ApiUtil.doPost(params, VISITOR_QRCODE); - - // 检查API调用是否成功 - if (!apiResp.getSuccess()) { - log.error("E8获取访客二维码失败 errorMsg:{}", apiResp); - // 如果API调用失败,返回null - return apiResp; - } - - // 返回API调用是否成功的标志 -// return JSONUtil.toList(JSONUtil.toJsonStr(apiResp.getResult()), VisitorAddRes.class).get(0); - return apiResp; + String result = e8ApiUtil.doPost(params, VISITOR_QRCODE); + return handleApiResponse(result, VisitorAddRes.class); } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/utils/E8ApiUtil.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/utils/E8ApiUtil.java index 09251a6d..9fec417d 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/utils/E8ApiUtil.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/utils/E8ApiUtil.java @@ -6,7 +6,6 @@ import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; -import org.dromara.sis.sdk.e8.domain.ApiResp; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; @@ -41,7 +40,7 @@ public class E8ApiUtil { * @param api 请求接口 * @return 请求结果 */ - public ApiResp doPost(Map params, String api) { + public String doPost(Map params, String api) { // 时间戳 String timestamp = Long.toString(System.currentTimeMillis()); @@ -75,7 +74,12 @@ public class E8ApiUtil { .header("sign", sign) .body(base64Body) .execute()) { - return JSONUtil.toBean(response.body(), ApiResp.class); + if (response.getStatus() == 200) { + return response.body(); + } else { + log.error("e8POST请求失败:{}", response.body()); + return null; + } } } @@ -86,7 +90,7 @@ public class E8ApiUtil { * @param paramStr 请求入参 * @return 请求结果 */ - public ApiResp doGetOrDel(String api, String paramStr, Boolean isDelete) { + public String doGetOrDel(String api, String paramStr, Boolean isDelete) { // 时间戳 String timestamp = Long.toString(System.currentTimeMillis()); // sign签名 @@ -103,7 +107,12 @@ public class E8ApiUtil { .header("sign", sign) .header("timestamp", timestamp) .header("paramstr", paramStr == null ? "50014" : paramStr).execute()) { - return JSONUtil.toBean(response.body(), ApiResp.class); + if (response.getStatus() == 200) { + return response.body(); + } else { + log.error("e8DEL请求失败:{}", response.body()); + return null; + } } } else { // 发送请求获取响应 @@ -113,7 +122,12 @@ public class E8ApiUtil { .header("sign", sign) .header("timestamp", timestamp) .header("paramstr", paramStr == null ? "50014" : paramStr).execute()) { - return JSONUtil.toBean(response.body(), ApiResp.class); + if (response.getStatus() == 200) { + return response.body(); + } else { + log.error("e8GET请求失败:{}", response.body()); + return null; + } } } } @@ -124,7 +138,7 @@ public class E8ApiUtil { * @param imageByte 请求入参 * @return 请求结果 */ - public ApiResp doFaceImgUpload(byte[] imageByte) { + public String doFaceImgUpload(byte[] imageByte) { // 请求地址 String api = "/api/E8/voucher/upload-images"; // 时间戳 @@ -143,8 +157,12 @@ public class E8ApiUtil { .header("timestamp", timestamp) .form("file", imageByte, "image.jpg") .execute()) { - - return JSONUtil.toBean(response.body(), ApiResp.class); + if (response.getStatus() == 200) { + return response.body(); + } else { + log.error("e8人脸图片上传请求失败:{}", response.body()); + return null; + } } } @@ -161,9 +179,9 @@ public class E8ApiUtil { // one&two String paramsUrl; - if (StrUtil.equals(url, buildUrlWithParams(url, params))){ + if (StrUtil.equals(url, buildUrlWithParams(url, params))) { paramsUrl = url + "timestamp=" + timestamp; - }else { + } else { paramsUrl = buildUrlWithParams(url, params) + "×tamp=" + timestamp; } // three diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java index c99b6069..0d7792e3 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java @@ -18,9 +18,9 @@ public interface HuaWeiBoxApi { * 新增图片 * * @param req 入参 - * @return Long + * @return HWResult */ - Long addPerson(List req); + HWResult addPerson(List req); /** * 删除图片 @@ -34,7 +34,7 @@ public interface HuaWeiBoxApi { * 根据抓拍图片比对,返回人员ID * * @param base64Img 入参 - * @return Map + * @return HWResult */ HWResult findPerson(String base64Img); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java index 6a4cfbbf..878bcfb3 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java @@ -32,10 +32,10 @@ public class HuaWeiBoxApiService implements HuaWeiBoxApi { * 新增图片 * * @param req 入参 - * @return Long + * @return HWResult */ @Override - public Long addPerson(List req) { + public HWResult addPerson(List req) { String url = "/sdk_service/rest/facerepositories/201/peoples"; JSONObject json = new JSONObject(); @@ -47,12 +47,12 @@ public class HuaWeiBoxApiService implements HuaWeiBoxApi { if (jsonRes.getInt("resultCode") != 0) { log.error("华为盒子新增图片失败,msg:{}", jsonRes.getStr("resultMsg")); - return null; + return new HWResult<>(jsonRes.getInt("resultCode"), jsonRes.getStr("resultMsg"), 0L); } JSONArray jsonArr = jsonRes.getJSONArray("ids"); JSONObject obj = jsonArr.getJSONObject(0); - return Long.parseLong(obj.getStr("peopleId")); + return new HWResult<>(200, "ok", obj.getLong("peopleId")); } /** @@ -84,7 +84,7 @@ public class HuaWeiBoxApiService implements HuaWeiBoxApi { * 根据抓拍图片比对,返回人员ID * * @param base64Img 入参 - * @return Long + * @return HWResult */ @Override public HWResult findPerson(String base64Img) { diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/EventAlarmReportServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/EventAlarmReportServiceImpl.java index bfda3e6b..5ae99e8e 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/EventAlarmReportServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/EventAlarmReportServiceImpl.java @@ -214,7 +214,7 @@ public class EventAlarmReportServiceImpl implements IEventAlarmReportService { data.setDeviceId(Long.parseLong(ac.getOutCode())); data.setDoorId(Long.parseLong(ac.getOutCode())); req.setControlList(List.of(data)); - Boolean flag = e8PlatformApi.remoteOpenDoor(req); + Boolean flag = e8PlatformApi.remoteOpenDoor(req).getSuccess(); log.info("远程开门结果,result={}", flag); } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java index 79d435f0..2fc60be1 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java @@ -260,7 +260,7 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { @Override @Transactional(rollbackFor = Exception.class) public Boolean syncE8() { - List authDoorDeviceFindRes = e8PlatformApi.getPageAuthDoorDeviceList(); + List authDoorDeviceFindRes = e8PlatformApi.getPageAuthDoorDeviceList().getResult(); if (CollUtil.isEmpty(authDoorDeviceFindRes)) { return false; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java index c21b2c31..4f2feb61 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java @@ -124,7 +124,7 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { add.setGroupId(bo.getAuthGroupId()); add.setBegDate(bo.getAuthBegDate()); add.setEndDate(bo.getAuthEndDate()); - add.setTenantId("000000"); + add.setTenantId(bo.getTenantId()); boolean flag = baseMapper.insert(add) > 0; Assert.isTrue(flag, "新增授权记录失败"); } @@ -155,6 +155,7 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { personLibImg.setResidentPersonId(bo.getId()); personLibImg.setImgMd5Value(md5); personLibImg.setRosterType(bo.getRosterType()); + personLibImg.setTenantId(bo.getTenantId()); Boolean flag = sisPersonLibImgService.insertByBo(personLibImg); if (flag) log.info("写入安防人像信息完成"); return flag; @@ -213,7 +214,7 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { } // 删除e8人员 - flag = e8PlatformApi.deleteCustomer(bo.getE8Id()); + flag = e8PlatformApi.deleteCustomer(bo.getE8Id()).getSuccess(); Assert.isTrue(flag, "删除e8人员失败"); return flag; diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java index 6468eeb2..f1c5a5be 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java @@ -17,9 +17,11 @@ import org.dromara.resource.api.RemoteFileService; import org.dromara.sis.domain.SisPersonLibImg; import org.dromara.sis.domain.bo.SisPersonLibImgBo; import org.dromara.sis.domain.vo.*; +import org.dromara.sis.dubbo.RemoteSisAuthServiceImpl; import org.dromara.sis.mapper.SisPersonLibImgMapper; import org.dromara.sis.sdk.huawei.HuaWeiBoxApi; import org.dromara.sis.sdk.huawei.domain.AddHWPersonReq; +import org.dromara.sis.sdk.huawei.domain.HWResult; import org.dromara.sis.service.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -109,12 +111,11 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { public Boolean insertByBo(SisPersonLibImgBo bo) { SisPersonLibImg add = MapstructUtils.convert(bo, SisPersonLibImg.class); assert add != null; - add.setTenantId("000000"); Assert.notNull(add, "数据处理失败"); boolean flag = baseMapper.insert(add) > 0; Assert.isTrue(flag, "新增数据失败"); - if (bo.getResidentPersonId() == null){ + if (bo.getResidentPersonId() == null) { try { bo.setId(add.getId()); // 记录图片md5值 @@ -132,16 +133,17 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { ArrayList pictures = new ArrayList<>(); pictures.add(Base64.getEncoder().encodeToString(imgByte)); req.setPictures(pictures); - Long pId = huaWeiBoxApi.addPerson(List.of(req)); - Assert.notNull(pId, "调用华为盒子新增图片失败"); - bo.setRemoteHwId(pId); - this.updateByBo(bo); + HWResult result = huaWeiBoxApi.addPerson(List.of(req)); + Assert.notNull(result, "调用华为盒子新增图片失败"); + if (result.getCode() == 200) { + bo.setRemoteHwId(result.getData()); + this.updateByBo(bo); + } else { + Assert.notNull(null, result.getMessage()); + } } catch (Exception e) { log.info(e.getMessage()); } - - - } return flag; diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/task/SyncLiftAuthTask.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/task/SyncLiftAuthTask.java index bd637a95..fce4d9b0 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/task/SyncLiftAuthTask.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/task/SyncLiftAuthTask.java @@ -55,7 +55,7 @@ public class SyncLiftAuthTask { // 9号电梯 lift.setDeviceId(550757939925061L); dto.setQueryDto(lift); - TableDataInfo nineLiftList = apiService.getPageAccessRecordList(dto); + TableDataInfo nineLiftList = apiService.getPageAccessRecordList(dto).getResult(); if (nineLiftList.getTotal() != 0) { liftAuth(nineLiftList.getRows(), "nineLift", "192.168.24.188"); } @@ -63,7 +63,7 @@ public class SyncLiftAuthTask { // 15号电梯 lift.setDeviceId(545024837750853L); dto.setQueryDto(lift); - TableDataInfo fifteenLiftList = apiService.getPageAccessRecordList(dto); + TableDataInfo fifteenLiftList = apiService.getPageAccessRecordList(dto).getResult(); if (fifteenLiftList.getTotal() != 0) { liftAuth(fifteenLiftList.getRows(), "fifteenLift", "192.168.24.188"); } diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/SyncGrantAuthTask.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/SyncGrantAuthTask.java index e6215acb..5167bf1f 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/SyncGrantAuthTask.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/SyncGrantAuthTask.java @@ -132,7 +132,11 @@ public class SyncGrantAuthTask { continue; } // 更新入驻员工E8平台id - remoteResidentPersonService.updateE8Id(person.getId(), e8Id); + Boolean updateE8Id = remoteResidentPersonService.updateE8Id(person.getId(), e8Id); + if (!updateE8Id) { + log.info("更新入驻员工E8平台id失败:{}-----{}", person.getName(), person.getId()); + remoteSisAuthService.deletePersonAuth(List.of(person.getId()), new ArrayList<>()); + } } } else { // 存在授权记录,为了避免重复授权,删除授权记录,等待下次定时任务 @@ -188,6 +192,7 @@ public class SyncGrantAuthTask { personAuth.setAuthBegDate(person.getAuthBegDate()); personAuth.setAuthEndDate(person.getAuthEndDate()); personAuth.setRosterType(person.getRosterType()); + personAuth.setTenantId(person.getTenantId()); return personAuth; } From b93be50a7a02f4bdbd33babd25e7fdce132e9e2c Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Thu, 11 Sep 2025 11:54:38 +0800 Subject: [PATCH 12/14] refactor(sis): 1 --- .../sis/service/impl/SisAccessControlServiceImpl.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java index 2fc60be1..e9d54e02 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java @@ -310,7 +310,10 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { data.setDeviceId(Long.parseLong(item.getOutCode())); list.add(data); } - req.setControlList(list); - return e8PlatformApi.remoteOpenDoor(req); + + RemoteOpenDoorReq realReq = new RemoteOpenDoorReq(); + realReq.setType(req.getType()); + realReq.setControlList(list); + return e8PlatformApi.remoteOpenDoor(realReq).getSuccess(); } } From f671fd51b208d65205d5eaced615779e3552a67e Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Thu, 11 Sep 2025 16:17:45 +0800 Subject: [PATCH 13/14] =?UTF-8?q?refactor(meterRecord):=20=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E7=94=B5=E8=A1=A8=E8=AF=BB=E6=95=B0=E4=B8=BA=E9=9B=B6?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TbMeterRecordServiceImpl.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java index 0fe94eb6..7f51e882 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java @@ -212,14 +212,6 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService { record.setCurrentReading(BigDecimal.ZERO); } - if (record.getCurrentReading().compareTo(BigDecimal.ZERO) == 0){ - // 通信状态改为离线 - TbMeterInfoBo bo = new TbMeterInfoBo(); - bo.setId(info.getId()); - bo.setCommunicationState(0L); - tbMeterInfoService.updateByBo(bo); - } - // 设置上次读数 if (hasOldRecords) { TbMeterRecord oldRecord = oldRecordMap.get(info.getId()); @@ -229,6 +221,15 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService { record.setPreviousReading(record.getCurrentReading()); } + if (record.getCurrentReading().compareTo(BigDecimal.ZERO) == 0){ + // 通信状态改为离线 + TbMeterInfoBo bo = new TbMeterInfoBo(); + bo.setId(info.getId()); + bo.setCommunicationState(0L); + tbMeterInfoService.updateByBo(bo); + record.setCurrentReading(record.getPreviousReading()); + } + record.setReadingMethod(MeterRecordTypeEnum.AUTO_RECORD.getCode()); recordNew.add(record); } From 53906a1ec332e337874067669638fcae925e40c8 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Thu, 11 Sep 2025 16:18:45 +0800 Subject: [PATCH 14/14] =?UTF-8?q?refactor(meterRecord):=20=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E7=94=B5=E8=A1=A8=E8=AF=BB=E6=95=B0=E4=B8=BA=E9=9B=B6?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/smartDevicesImpl/TbMeterRecordServiceImpl.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java index 7f51e882..b1a7a577 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java @@ -5,7 +5,6 @@ import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; @@ -15,7 +14,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.property.domain.bo.smartDevicesBo.TbMeterInfoBo; -import org.dromara.property.domain.entity.smartDevices.TbMeterInfo; import org.dromara.property.domain.enums.MeterRecordTypeEnum; import org.dromara.property.domain.vo.smartDevicesVo.TbMeterInfoVo; import org.dromara.property.rocketmq.domain.MeterResult; @@ -29,7 +27,6 @@ import org.dromara.property.service.smartDevicesService.ITbMeterRecordService; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.math.RoundingMode; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors;