diff --git a/ruoyi-modules/Property/pom.xml b/ruoyi-modules/Property/pom.xml index fdb2815b..1436b359 100644 --- a/ruoyi-modules/Property/pom.xml +++ b/ruoyi-modules/Property/pom.xml @@ -120,6 +120,12 @@ sis-api 2.4.0 + + org.dromara + ruoyi-system + 2.4.0 + compile + diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java index 3b4e675a..eaeb2018 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java @@ -45,6 +45,9 @@ public class AttendanceArrangementController extends BaseController { return attendanceArrangementService.queryPageList(bo, pageQuery); } + + + /** * 查询某个月的日历排班信息的排班列表 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceUserGroupController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceUserGroupController.java index 0079ab1e..58ffb3b0 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceUserGroupController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceUserGroupController.java @@ -6,6 +6,8 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.property.domain.bo.AttendanceArrangementBo; +import org.dromara.property.domain.vo.AttendanceArrangementVo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -103,4 +105,13 @@ public class AttendanceUserGroupController extends BaseController { @PathVariable("ids") Long[] ids) { return toAjax(attendanceUserGroupService.deleteWithValidByIds(List.of(ids), true)); } + + /** + * 查询排班的班表视图 + */ + @SaCheckPermission("Property:userGroup:queryScheduleView") + @GetMapping("/queryScheduleView") + public TableDataInfo queryScheduleView(AttendanceUserGroupBo bo, PageQuery pageQuery) { + return attendanceUserGroupService.queryScheduleView(bo, pageQuery); + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionTaskDetailController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionTaskDetailController.java index c080cd01..ab2de8f8 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionTaskDetailController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/InspectionTaskDetailController.java @@ -6,9 +6,6 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; -import org.dromara.property.domain.bo.InspectionTaskDetailBo; -import org.dromara.property.domain.vo.InspectionTaskDetailVo; -import org.dromara.property.service.IInspectionTaskDetailService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -20,14 +17,17 @@ 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.InspectionTaskDetailVo; +import org.dromara.property.domain.bo.InspectionTaskDetailBo; +import org.dromara.property.service.IInspectionTaskDetailService; import org.dromara.common.mybatis.core.page.TableDataInfo; /** * 巡检明细 - * 前端访问路由地址为:/system/taskDetail + * 前端访问路由地址为:/property/taskDetail * * @author mocheng - * @date 2025-07-15 + * @date 2025-08-08 */ @Validated @RequiredArgsConstructor @@ -40,7 +40,7 @@ public class InspectionTaskDetailController extends BaseController { /** * 查询巡检明细列表 */ - //@SaCheckPermission("system:taskDetail:list") + @SaCheckPermission("property:taskDetail:list") @GetMapping("/list") public TableDataInfo list(InspectionTaskDetailBo bo, PageQuery pageQuery) { return inspectionTaskDetailService.queryPageList(bo, pageQuery); @@ -49,7 +49,7 @@ public class InspectionTaskDetailController extends BaseController { /** * 导出巡检明细列表 */ - @SaCheckPermission("system:taskDetail:export") + @SaCheckPermission("property:taskDetail:export") @Log(title = "巡检明细", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(InspectionTaskDetailBo bo, HttpServletResponse response) { @@ -62,7 +62,7 @@ public class InspectionTaskDetailController extends BaseController { * * @param id 主键 */ - @SaCheckPermission("system:taskDetail:query") + @SaCheckPermission("property:taskDetail:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable("id") Long id) { @@ -72,7 +72,7 @@ public class InspectionTaskDetailController extends BaseController { /** * 新增巡检明细 */ - @SaCheckPermission("system:taskDetail:add") + @SaCheckPermission("property:taskDetail:add") @Log(title = "巡检明细", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() @@ -83,7 +83,7 @@ public class InspectionTaskDetailController extends BaseController { /** * 修改巡检明细 */ - @SaCheckPermission("system:taskDetail:edit") + @SaCheckPermission("property:taskDetail:edit") @Log(title = "巡检明细", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() @@ -96,7 +96,7 @@ public class InspectionTaskDetailController extends BaseController { * * @param ids 主键串 */ - @SaCheckPermission("system:taskDetail:remove") + @SaCheckPermission("property:taskDetail:remove") @Log(title = "巡检明细", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public R remove(@NotEmpty(message = "主键不能为空") diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceUserGroup.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceUserGroup.java index af8673e7..bff194a1 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceUserGroup.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceUserGroup.java @@ -4,8 +4,12 @@ import org.dromara.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; +import org.dromara.system.domain.SysUser; +import org.springframework.format.annotation.DateTimeFormat; import java.io.Serial; +import java.time.LocalDate; +import java.util.List; /** * 排班明细对象 attendance_user_group @@ -22,7 +26,7 @@ public class AttendanceUserGroup extends TenantEntity { private static final long serialVersionUID = 1L; /** - * + * */ @TableId(value = "id") private Long id; @@ -37,20 +41,32 @@ public class AttendanceUserGroup extends TenantEntity { */ private Long employeeId; - /** - * 员工姓名 - */ - private String employeeName; +// /** +// * 员工姓名 +// */ +// private String employeeName; /** * 部门ID */ private Long deptId; +// /** +// * 部门名称 +// */ +// private String deptName; + /** - * 部门名称 + * 开始日期 */ - private String deptName; + private LocalDate startDate; + + /** + * 结束日期(仅date_type=3时有效) + */ + private LocalDate endDate; + + private SysUser sysUser; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java index 92b32b1b..5d1b45cd 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java @@ -4,8 +4,10 @@ import org.dromara.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; +import org.dromara.common.translation.annotation.Translation; import java.util.Date; - +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.common.translation.constant.TransConstant; import java.io.Serial; @@ -13,7 +15,7 @@ import java.io.Serial; * 巡检明细对象 inspection_task_detail * * @author mocheng - * @date 2025-07-15 + * @date 2025-08-08 */ @Data @EqualsAndHashCode(callSuper = true) @@ -55,20 +57,60 @@ public class InspectionTaskDetail extends TenantEntity { private String patrolType; /** - * 签到类型 + * 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码) */ private String signType; + /** + * 实际巡检时间 + */ + private Date actualInspectionTime; + + /** + * 实际签到状态(1已签到2.未签到) + */ + private String actualSignState; + /** * 巡检状态(0未完成,1已完成) */ private String inspectionState; /** - * 巡检照片 + * 巡检图片 */ private String inspectionImage; + /** + * 计划巡检人 + */ + private String planInspectionPerson; + + /** + * 实际巡检人 + */ + private String actualInspectionPerson; + + /** + * 任务状态 + */ + private String taskStatus; + + /** + * 巡检结果 + */ + private String inspectionResults; + + /** + * 巡检描述 + */ + private String inspectionDesc; + + /** + * 巡检位置 + */ + private String inspectionLocation; + /** * 实际巡检时间 */ @@ -89,4 +131,10 @@ public class InspectionTaskDetail extends TenantEntity { */ private Date pointEndTime; + /** + * 搜索值 + */ + private String searchValue; + + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrders.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrders.java index 69c57064..de379feb 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrders.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrders.java @@ -105,6 +105,10 @@ public class ServiceWorkOrders extends TenantEntity { * 工单图片 */ private String orderImgUrl; + /** + * 上报类型 + */ + private String reportingType; /** * 备注 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java index 05b3f073..2968a7cb 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java @@ -84,6 +84,10 @@ public class AttendanceArrangementBo extends BaseEntity { */ private Long status; + private List employeeId; + + private List deptId; + /** * * 排班用户组 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceUserGroupBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceUserGroupBo.java index d5b860c0..a9c45c75 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceUserGroupBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceUserGroupBo.java @@ -8,6 +8,9 @@ import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; /** * 排班明细业务对象 attendance_user_group @@ -21,7 +24,7 @@ import jakarta.validation.constraints.*; public class AttendanceUserGroupBo extends BaseEntity { /** - * + * */ @NotNull(message = "不能为空", groups = { EditGroup.class }) private Long id; @@ -36,20 +39,36 @@ public class AttendanceUserGroupBo extends BaseEntity { */ private Long employeeId; - /** - * 员工姓名 - */ - private String employeeName; +// /** +// * 员工姓名 +// */ +// private String employeeName; /** * 部门ID */ private Long deptId; +// /** +// * 部门名称 +// */ +// private String deptName; + /** - * 部门名称 + * 开始日期 */ - private String deptName; + private LocalDate startDate; + + /** + * 结束日期(仅date_type=3时有效) + */ + private LocalDate endDate; + + + /** + * 前端传某天的当前日期 + */ + private LocalDate currentDate; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionTaskDetailBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionTaskDetailBo.java index 9c60718a..1582ae77 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionTaskDetailBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionTaskDetailBo.java @@ -1,5 +1,6 @@ package org.dromara.property.domain.bo; +import org.dromara.property.domain.InspectionTaskDetail; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; @@ -7,14 +8,16 @@ import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; -import org.dromara.property.domain.InspectionTaskDetail; - +import org.dromara.common.translation.annotation.Translation; import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.common.translation.constant.TransConstant; + /** * 巡检明细业务对象 inspection_task_detail * * @author mocheng - * @date 2025-07-15 + * @date 2025-08-08 */ @Data @EqualsAndHashCode(callSuper = true) @@ -55,20 +58,60 @@ public class InspectionTaskDetailBo extends BaseEntity { private String patrolType; /** - * 签到类型 + * 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码) */ private String signType; + /** + * 实际巡检时间 + */ + private Date actualInspectionTime; + + /** + * 实际签到状态(1已签到2.未签到) + */ + private String actualSignState; + /** * 巡检状态(0未完成,1已完成) */ private String inspectionState; /** - * 巡检照片 + * 巡检图片 */ private String inspectionImage; + /** + * 计划巡检人 + */ + private String planInspectionPerson; + + /** + * 实际巡检人 + */ + private String actualInspectionPerson; + + /** + * 任务状态 + */ + private String taskStatus; + + /** + * 巡检结果 + */ + private String inspectionResults; + + /** + * 巡检描述 + */ + private String inspectionDesc; + + /** + * 巡检位置 + */ + private String inspectionLocation; + /** * 实际巡检时间 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersBo.java index 68b7bdf0..ee3e8d83 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ServiceWorkOrdersBo.java @@ -3,6 +3,7 @@ package org.dromara.property.domain.bo; import cn.idev.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; @@ -26,7 +27,7 @@ public class ServiceWorkOrdersBo extends BaseEntity { /** * id */ - @NotNull(message = "id不能为空", groups = { EditGroup.class }) + @NotBlank(message = "id不能为空", groups = { EditGroup.class }) private Long id; /** @@ -37,7 +38,7 @@ public class ServiceWorkOrdersBo extends BaseEntity { /** * 工单名称 */ - @NotNull(message = "工单名称不能为空", groups = { EditGroup.class }) + @NotBlank(message = "工单名称不能为空", groups = { EditGroup.class }) private String orderName; /** * 权重 @@ -49,6 +50,11 @@ public class ServiceWorkOrdersBo extends BaseEntity { */ @NotNull(message = "工单类型不能为空", groups = { EditGroup.class }) private Long type; + /** + * 上报类型 + */ + @NotBlank(message = "上报类型不能为空", groups = { EditGroup.class }) + private String reportingType; /** * 状态 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceUserGroupVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceUserGroupVo.java index 37456201..f8507a78 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceUserGroupVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceUserGroupVo.java @@ -1,15 +1,17 @@ package org.dromara.property.domain.vo; -import org.dromara.property.domain.AttendanceUserGroup; +import org.dromara.property.domain.*; import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; import java.io.Serial; import java.io.Serializable; +import java.time.LocalDate; import java.util.Date; @@ -29,7 +31,7 @@ public class AttendanceUserGroupVo implements Serializable { private static final long serialVersionUID = 1L; /** - * + * */ @ExcelProperty(value = "") private Long id; @@ -46,11 +48,11 @@ public class AttendanceUserGroupVo implements Serializable { @ExcelProperty(value = "员工ID") private Long employeeId; - /** - * 员工姓名 - */ - @ExcelProperty(value = "员工姓名") - private String employeeName; +// /** +// * 员工姓名 +// */ +// @ExcelProperty(value = "员工姓名") +// private String employeeName; /** * 部门ID @@ -58,11 +60,31 @@ public class AttendanceUserGroupVo implements Serializable { @ExcelProperty(value = "部门ID") private Long deptId; +// /** +// * 部门名称 +// */ +// @ExcelProperty(value = "部门名称") +// private String deptName; + /** - * 部门名称 + * 开始日期 */ - @ExcelProperty(value = "部门名称") - private String deptName; + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate startDate; + + /** + * 结束日期(仅date_type=3时有效) + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate endDate; + + private AttendanceArrangement attendanceArrangement; + + private AttendanceGroup attendanceGroup; + + private AttendanceShift attendanceShift; + + private AttendanceScheduleCycle scheduleCycle; } 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 d939c423..4fbc9878 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 @@ -1,10 +1,16 @@ package org.dromara.property.domain.vo; +import org.dromara.common.translation.annotation.Translation; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.property.domain.InspectionTaskDetail; import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; -import org.dromara.property.domain.InspectionTaskDetail; import java.io.Serial; import java.io.Serializable; @@ -16,7 +22,7 @@ import java.util.Date; * 巡检明细视图对象 inspection_task_detail * * @author mocheng - * @date 2025-07-15 + * @date 2025-08-08 */ @Data @ExcelIgnoreUnannotated @@ -63,11 +69,23 @@ public class InspectionTaskDetailVo implements Serializable { private String patrolType; /** - * 签到类型 + * 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码) */ - @ExcelProperty(value = "签到类型") + @ExcelProperty(value = "签到类型(1.现场拍照、2.摄像头签到、3.现场扫码)") private String signType; + /** + * 实际巡检时间 + */ + @ExcelProperty(value = "实际巡检时间") + private Date actualInspectionTime; + + /** + * 实际签到状态(1已签到2.未签到) + */ + @ExcelProperty(value = "实际签到状态(1已签到2.未签到)") + private String actualSignState; + /** * 巡检状态(0未完成,1已完成) */ @@ -75,11 +93,52 @@ public class InspectionTaskDetailVo implements Serializable { private String inspectionState; /** - * 巡检照片 + * 巡检图片 */ - @ExcelProperty(value = "巡检照片") + @ExcelProperty(value = "巡检图片") private String inspectionImage; + /** + * 巡检图片Url + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "inspectionImage") + private String inspectionImageUrl; + /** + * 计划巡检人 + */ + @ExcelProperty(value = "计划巡检人") + private String planInspectionPerson; + + /** + * 实际巡检人 + */ + @ExcelProperty(value = "实际巡检人") + private String actualInspectionPerson; + + /** + * 任务状态 + */ + @ExcelProperty(value = "任务状态") + private String taskStatus; + + /** + * 巡检结果 + */ + @ExcelProperty(value = "巡检结果") + private String inspectionResults; + + /** + * 巡检描述 + */ + @ExcelProperty(value = "巡检描述") + private String inspectionDesc; + + /** + * 巡检位置 + */ + @ExcelProperty(value = "巡检位置") + private String inspectionLocation; + /** * 实际巡检时间 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersInfoVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersInfoVo.java index 046f9a7d..87a9e11f 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersInfoVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersInfoVo.java @@ -48,6 +48,10 @@ public class ServiceWorkOrdersInfoVo implements Serializable { */ @ExcelProperty(value = "工单类型") private Long type; + /** + * 上报类型 + */ + private String reportingType; /** * 权重 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java index da00307b..67a807cd 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java @@ -54,6 +54,10 @@ public class ServiceWorkOrdersVo implements Serializable { */ @ExcelProperty(value = "工单类型") private Long type; + /** + * 上报类型 + */ + private String reportingType; /** * 工单类型名称 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionTaskDetailMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionTaskDetailMapper.java index daa3a291..5ecc936e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionTaskDetailMapper.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/InspectionTaskDetailMapper.java @@ -1,17 +1,15 @@ package org.dromara.property.mapper; -import org.apache.ibatis.annotations.Mapper; -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.property.domain.InspectionTaskDetail; import org.dromara.property.domain.vo.InspectionTaskDetailVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; /** * 巡检明细Mapper接口 * * @author mocheng - * @date 2025-07-15 + * @date 2025-08-08 */ -@Mapper public interface InspectionTaskDetailMapper extends BaseMapperPlus { } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java index 856014de..c452f573 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java @@ -67,4 +67,5 @@ public interface IAttendanceArrangementService { Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +// TableDataInfo queryScheduleView(AttendanceArrangementBo bo, PageQuery pageQuery); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceUserGroupService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceUserGroupService.java index eb51e331..0c800425 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceUserGroupService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceUserGroupService.java @@ -1,6 +1,5 @@ package org.dromara.property.service; -import org.dromara.property.domain.AttendanceUserGroup; import org.dromara.property.domain.vo.AttendanceUserGroupVo; import org.dromara.property.domain.bo.AttendanceUserGroupBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -66,4 +65,6 @@ public interface IAttendanceUserGroupService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + TableDataInfo queryScheduleView(AttendanceUserGroupBo bo, PageQuery pageQuery); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java index 1f821add..47497e69 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java @@ -1,9 +1,10 @@ package org.dromara.property.service; +import org.dromara.property.domain.InspectionTaskDetail; +import org.dromara.property.domain.vo.InspectionTaskDetailVo; +import org.dromara.property.domain.bo.InspectionTaskDetailBo; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.property.domain.bo.InspectionTaskDetailBo; -import org.dromara.property.domain.vo.InspectionTaskDetailVo; import java.util.Collection; import java.util.List; @@ -12,7 +13,7 @@ import java.util.List; * 巡检明细Service接口 * * @author mocheng - * @date 2025-07-15 + * @date 2025-08-08 */ public interface IInspectionTaskDetailService { diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java index e14f152b..b64ff3ba 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.beanutils.BeanUtils; +import org.apache.dubbo.config.annotation.DubboService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -18,6 +19,8 @@ import org.dromara.property.domain.constant.StatusConstant; import org.dromara.property.domain.vo.AttendanceArrangementVo; import org.dromara.property.mapper.*; import org.dromara.property.service.IAttendanceArrangementService; +import org.dromara.system.domain.SysUser; +import org.dromara.system.mapper.SysUserMapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -54,6 +57,8 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS private final AttendanceScheduleCycleMapper scheduleCycleMapper; + private final SysUserMapper sysUserMapper; + /** * 查询排班 * @@ -255,6 +260,8 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS return TableDataInfo.build(attendanceArrangementVoPage); } + + /** * 查询某个月的日历排班信息的排班列表 * @@ -309,6 +316,15 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS for (AttendanceArrangementVo vo : result) { // 根据排班查询出人员组的详细信息 List userGroupList = userGroupMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceUserGroup::getScheduleId, vo.getId())); + + //通过userGroupList查询出人员的详细信息 + + //将userList存到userGroupList中 + userGroupList.forEach(userGroup -> { + SysUser sysUser = sysUserMapper.selectById(userGroup.getEmployeeId()); + userGroup.setSysUser(sysUser); + } + ); // 将排班人员信息添加到排班信息中 vo.setUserGroupList(userGroupList); @@ -446,6 +462,8 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS List userGroupList = bo.getUserGroupList(); for (AttendanceUserGroup userGroup : userGroupList) { userGroup.setScheduleId(ArrangementId); + userGroup.setStartDate(bo.getStartDate()); + userGroup.setEndDate(bo.getEndDate()); userGroupMapper.insert(userGroup); } @@ -484,6 +502,13 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS // judgeDate(bo, update); + //根据排班id获取人员id + //根据人员id删除人员信息 + //新增人员信息 + //根据排班id获取部门id + //根据部门id删除部门信息 + //新增部门信息 + //取出当前排班的id assert update != null; Long ArrangementId = update.getId(); @@ -494,6 +519,13 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS userGroupMapper.delete(Wrappers.lambdaQuery().in(AttendanceUserGroup::getEmployeeId, employeeIdList) .eq(AttendanceUserGroup::getScheduleId, ArrangementId)); + //根据排班id获取部门id + List deptIdList = userGroupMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceUserGroup::getScheduleId, ArrangementId)) + .stream().map(AttendanceUserGroup::getDeptId).toList(); + //根据deptId和ArrangementId删除attendanceDeptGroup表中的数据 + userGroupMapper.delete(Wrappers.lambdaQuery().in(AttendanceUserGroup::getDeptId, deptIdList) + .eq(AttendanceUserGroup::getScheduleId, ArrangementId)); + //用获取到的排班id向attendanceUserGroup表中批量插入数据 List userGroupList = bo.getUserGroupList(); @@ -570,4 +602,5 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS } + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java index fb38fc40..63c4d027 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java @@ -9,16 +9,21 @@ 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.*; +import org.dromara.property.domain.bo.AttendanceArrangementBo; +import org.dromara.property.domain.constant.StatusConstant; +import org.dromara.property.domain.vo.AttendanceArrangementVo; +import org.dromara.property.mapper.*; import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.AttendanceUserGroupBo; import org.dromara.property.domain.vo.AttendanceUserGroupVo; -import org.dromara.property.domain.AttendanceUserGroup; -import org.dromara.property.mapper.AttendanceUserGroupMapper; import org.dromara.property.service.IAttendanceUserGroupService; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.*; +import java.util.stream.Collectors; /** * 排班明细Service业务层处理 @@ -33,6 +38,16 @@ public class AttendanceUserGroupServiceImpl implements IAttendanceUserGroupServi private final AttendanceUserGroupMapper baseMapper; + private final AttendanceArrangementMapper arrangementMapper; + + private final AttendanceGroupMapper groupMapper; + + private final AttendanceWeekSetMapper weekSetMapper; + + private final AttendanceShiftMapper shiftMapper; + + private final AttendanceScheduleCycleMapper scheduleCycleMapper; + /** * 查询排班明细 * @@ -40,7 +55,7 @@ public class AttendanceUserGroupServiceImpl implements IAttendanceUserGroupServi * @return 排班明细 */ @Override - public AttendanceUserGroupVo queryById(Long id){ + public AttendanceUserGroupVo queryById(Long id) { return baseMapper.selectVoById(id); } @@ -76,9 +91,9 @@ public class AttendanceUserGroupServiceImpl implements IAttendanceUserGroupServi lqw.orderByAsc(AttendanceUserGroup::getId); lqw.eq(bo.getScheduleId() != null, AttendanceUserGroup::getScheduleId, bo.getScheduleId()); lqw.eq(bo.getEmployeeId() != null, AttendanceUserGroup::getEmployeeId, bo.getEmployeeId()); - lqw.like(StringUtils.isNotBlank(bo.getEmployeeName()), AttendanceUserGroup::getEmployeeName, bo.getEmployeeName()); +// lqw.like(StringUtils.isNotBlank(bo.getEmployeeName()), AttendanceUserGroup::getEmployeeName, bo.getEmployeeName()); lqw.eq(bo.getDeptId() != null, AttendanceUserGroup::getDeptId, bo.getDeptId()); - lqw.like(StringUtils.isNotBlank(bo.getDeptName()), AttendanceUserGroup::getDeptName, bo.getDeptName()); +// lqw.like(StringUtils.isNotBlank(bo.getDeptName()), AttendanceUserGroup::getDeptName, bo.getDeptName()); return lqw; } @@ -115,7 +130,7 @@ public class AttendanceUserGroupServiceImpl implements IAttendanceUserGroupServi /** * 保存前的数据校验 */ - private void validEntityBeforeSave(AttendanceUserGroup entity){ + private void validEntityBeforeSave(AttendanceUserGroup entity) { //TODO 做一些数据校验,如唯一约束 } @@ -128,9 +143,109 @@ public class AttendanceUserGroupServiceImpl implements IAttendanceUserGroupServi */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; } + + + /** + * 查询排班的班表视图 + */ + @Override + public TableDataInfo queryScheduleView(AttendanceUserGroupBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + //查询当前日期在哪些人员组中,当前日期大于等于人员组开始日期,小于等于人员组结束日期 + LambdaQueryWrapper ge = lqw + .le(AttendanceUserGroup::getStartDate, bo.getCurrentDate()) + .ge(AttendanceUserGroup::getEndDate, bo.getCurrentDate()); + + Page result = baseMapper.selectVoPage(pageQuery.build(), ge); + Page attendanceArrangementVoPage = result.setRecords(result.getRecords().stream().map(vo -> { + // 根据当前日期查询在开始时间和结束时间之间的人员组信息 + if ((bo.getCurrentDate().isAfter(vo.getStartDate()) || bo.getCurrentDate().isEqual(vo.getStartDate())) && + (bo.getCurrentDate().isBefore(vo.getEndDate()) || bo.getCurrentDate().isEqual(vo.getEndDate()))) { + + // 根据查询出来的result取出scheduleId + Long scheduleId = vo.getScheduleId(); + // 根据排班的id查询出排班的人员详细信息 +// List userGroupList = baseMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceUserGroup::getScheduleId, scheduleId)); + + //根据scheduleId查询出排班的详细信息 + AttendanceArrangement attendanceArrangement = arrangementMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceArrangement::getId, scheduleId)); + // 假设每个vo只有一个scheduleId + Long userGroupListScheduleId = attendanceArrangement.getId(); + AttendanceArrangement arrangement = arrangementMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceArrangement::getId, userGroupListScheduleId)); + vo.setAttendanceArrangement(arrangement); + + // 根据scheduleId过滤出groupId + Long groupId = arrangement.getGroupId(); + // 根据groupId查询出考勤组的详细信息 + AttendanceGroup attendanceGroup = groupMapper.selectById(groupId); + vo.setAttendanceGroup(attendanceGroup); + + // 判断当前考勤组的班制是固定班制还是排班制 + if (Objects.equals(attendanceGroup.getAttendanceType(), StatusConstant.FIXEDSCHEDULE)) { + // 固定班制 + // 根据考勤组id查询出班制信息的dayOfWeek + List weekSetList = weekSetMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceWeekSet::getGroupId, groupId)); + // 将当前日期转换为周几 + int weekNumber = bo.getCurrentDate().getDayOfWeek().getValue(); + // 匹配weekNumber和weekSetList中的dayOfWeek,匹配成功则将weekSet存到vo中 + AttendanceWeekSet attendanceWeekSet = weekSetList.stream().filter(weekSet -> weekSet.getDayOfWeek() == weekNumber).findFirst().orElse(null); + if (attendanceWeekSet != null) { + // 根据过滤出来的attendanceWeekSet的weekSetId查询出shiftId + Long shiftId = attendanceWeekSet.getShiftId(); + // 根据shiftId查询出班次的详细信息 + AttendanceShift attendanceShift = shiftMapper.selectById(shiftId); + // 将attendanceShift存到vo中 + vo.setAttendanceShift(attendanceShift); + } + } else if (Objects.equals(attendanceGroup.getAttendanceType(), StatusConstant.SHIFTSCHEDULE)) { + // 排班制 + // 将startDate作为第一天,endDate作为最后一天,循环判断当前日期是第几天,取出当前天数的班次信息。 + LocalDate startDate = vo.getStartDate(); + LocalDate endDate = vo.getEndDate(); + LocalDate currentDate = bo.getCurrentDate(); + + // 取出attendanceScheduleCycle表中的天数 + List cycleDaysList = scheduleCycleMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId)).stream() + .map(AttendanceScheduleCycle::getDayNumber) + .toList(); + + // 在startDate和endDate之间循环,判断当前日期是cycleDays中的第几天 + for (LocalDate date = startDate; date.isBefore(endDate) || date.isEqual(endDate); date = date.plusDays(1)) { + if (date.isEqual(currentDate)) { + // 判断当前日期是cycleDays中的第几天 + int dayNumber = (int) (ChronoUnit.DAYS.between(startDate, date) + 1); + int cycleDay = dayNumber % cycleDaysList.size(); + if (cycleDay == 0) { + cycleDay = cycleDaysList.size(); + } + // 根据cycleDay查询出当前日期的班次信息 + AttendanceScheduleCycle cycle = scheduleCycleMapper.selectOne(Wrappers.lambdaQuery() + .eq(AttendanceScheduleCycle::getGroupId, groupId) + .eq(AttendanceScheduleCycle::getDayNumber, cycleDay)); + if (cycle != null) { + // 将cycle存到vo中 + vo.setScheduleCycle(cycle); + // 根据cycleId查询出shiftId + Long shiftId = cycle.getShiftId(); + // 根据shiftId查询出班次的详细信息 + AttendanceShift attendanceShift = shiftMapper.selectById(shiftId); + // 将shift存到vo中 + vo.setAttendanceShift(attendanceShift); + } + break; // 找到当前日期后跳出循环 + } + } + } + } + return vo; + }).collect(Collectors.toList())); + + return TableDataInfo.build(attendanceArrangementVoPage); + + } } 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 86c0ed9d..08940d1c 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 @@ -9,13 +9,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dromara.property.domain.InspectionTaskDetail; +import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.InspectionTaskDetailBo; import org.dromara.property.domain.vo.InspectionTaskDetailVo; +import org.dromara.property.domain.InspectionTaskDetail; import org.dromara.property.mapper.InspectionTaskDetailMapper; import org.dromara.property.service.IInspectionTaskDetailService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; @@ -25,7 +24,7 @@ import java.util.Collection; * 巡检明细Service业务层处理 * * @author mocheng - * @date 2025-07-15 + * @date 2025-08-08 */ @Slf4j @RequiredArgsConstructor @@ -81,7 +80,16 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer lqw.eq(bo.getPointId() != null, InspectionTaskDetail::getPointId, bo.getPointId()); lqw.eq(StringUtils.isNotBlank(bo.getPatrolType()), InspectionTaskDetail::getPatrolType, bo.getPatrolType()); lqw.eq(StringUtils.isNotBlank(bo.getSignType()), InspectionTaskDetail::getSignType, bo.getSignType()); + lqw.eq(bo.getActualInspectionTime() != null, InspectionTaskDetail::getActualInspectionTime, bo.getActualInspectionTime()); + lqw.eq(StringUtils.isNotBlank(bo.getActualSignState()), InspectionTaskDetail::getActualSignState, bo.getActualSignState()); lqw.eq(StringUtils.isNotBlank(bo.getInspectionState()), InspectionTaskDetail::getInspectionState, bo.getInspectionState()); + lqw.eq(StringUtils.isNotBlank(bo.getInspectionImage()), InspectionTaskDetail::getInspectionImage, bo.getInspectionImage()); + lqw.eq(StringUtils.isNotBlank(bo.getPlanInspectionPerson()), InspectionTaskDetail::getPlanInspectionPerson, bo.getPlanInspectionPerson()); + lqw.eq(StringUtils.isNotBlank(bo.getActualInspectionPerson()), InspectionTaskDetail::getActualInspectionPerson, bo.getActualInspectionPerson()); + lqw.eq(StringUtils.isNotBlank(bo.getTaskStatus()), InspectionTaskDetail::getTaskStatus, bo.getTaskStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getInspectionResults()), InspectionTaskDetail::getInspectionResults, bo.getInspectionResults()); + lqw.eq(StringUtils.isNotBlank(bo.getInspectionDesc()), InspectionTaskDetail::getInspectionDesc, bo.getInspectionDesc()); + lqw.eq(StringUtils.isNotBlank(bo.getInspectionLocation()), InspectionTaskDetail::getInspectionLocation, bo.getInspectionLocation()); lqw.eq(bo.getInspectionTime() != null, InspectionTaskDetail::getInspectionTime, bo.getInspectionTime()); lqw.eq(bo.getPointStartTime() != null, InspectionTaskDetail::getPointStartTime, bo.getPointStartTime()); lqw.eq(bo.getPointEndTime() != null, InspectionTaskDetail::getPointEndTime, bo.getPointEndTime()); @@ -96,7 +104,6 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer * @return 是否新增成功 */ @Override - @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(InspectionTaskDetailBo bo) { InspectionTaskDetail add = MapstructUtils.convert(bo, InspectionTaskDetail.class); validEntityBeforeSave(add); @@ -114,7 +121,6 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer * @return 是否修改成功 */ @Override - @Transactional(rollbackFor = Exception.class) public Boolean updateByBo(InspectionTaskDetailBo bo) { InspectionTaskDetail update = MapstructUtils.convert(bo, InspectionTaskDetail.class); validEntityBeforeSave(update); @@ -136,7 +142,6 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer * @return 是否删除成功 */ @Override - @Transactional(rollbackFor = Exception.class) public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 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 68ac9a24..814caacf 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 @@ -247,13 +247,11 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { ordersLambdaQueryWrapper.eq(ServiceWorkOrdersRecord::getStatus, entity.getStatus()); boolean exists = workOrdersRecordMapper.exists(ordersLambdaQueryWrapper); //TODO 做一些数据校验,如唯一约束 - if (!exists) { ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord(); serviceWorkOrdersRecord.setOrderId(entity.getId()); serviceWorkOrdersRecord.setStatus(entity.getStatus()); serviceWorkOrdersRecord.setHandler(entity.getHandler()); workOrdersRecordMapper.insert(serviceWorkOrdersRecord); - } } /** diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/AlarmPushController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/AlarmPushController.java new file mode 100644 index 00000000..929d50c0 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/AlarmPushController.java @@ -0,0 +1,189 @@ +package org.dromara.sis.controller; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.sis.domain.AlarmRecord; +import org.dromara.sis.domain.bo.SisAlarmEventsBo; +import org.dromara.sis.service.AlarmRecordService; +import org.dromara.sis.service.ISisAlarmEventsService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 告警数据主动推送控制器 + * 接收外部系统推送的告警数据并同步到数据库 + */ +@Slf4j +@RestController +@RequestMapping("/api/alarm/push") +@RequiredArgsConstructor +public class AlarmPushController { + + private final AlarmRecordService alarmRecordService; + private final ISisAlarmEventsService sisAlarmEventsService; + + /** + * 接收单条告警数据推送 + */ + @PostMapping("/single") + public ResponseEntity> pushSingleAlarm(@RequestBody Map alarmData) { + try { + // 处理单条数据 + processAlarmData(Collections.singletonList(alarmData)); + + Map result = new HashMap<>(); + result.put("success", true); + result.put("message", "告警数据推送成功"); + result.put("timestamp", new Date()); + return ResponseEntity.ok(result); + } catch (Exception e) { + log.error("处理单条告警推送失败: {}", e.getMessage(), e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(Collections.singletonMap("error", "处理告警数据失败: " + e.getMessage())); + } + } + + /** + * 接收批量告警数据推送 + */ + @PostMapping("/batch") + public ResponseEntity> pushBatchAlarms(@RequestBody List> alarmDataList) { + if (alarmDataList == null || alarmDataList.isEmpty()) { + return ResponseEntity.badRequest().body(Collections.singletonMap("error", "推送数据不能为空")); + } + + try { + int processedCount = processAlarmData(alarmDataList); + + Map result = new HashMap<>(); + result.put("success", true); + result.put("message", "批量告警数据推送成功"); + result.put("processedCount", processedCount); + result.put("totalReceived", alarmDataList.size()); + result.put("timestamp", new Date()); + return ResponseEntity.ok(result); + } catch (Exception e) { + log.error("处理批量告警推送失败: {}", e.getMessage(), e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(Collections.singletonMap("error", "处理告警数据失败: " + e.getMessage())); + } + } + + /** + * 处理告警数据并保存到数据库 + * @param alarmDataList 告警数据列表 + * @return 处理成功的数量 + */ + private int processAlarmData(List> alarmDataList) { + log.info("开始处理推送的告警数据,共 {} 条", alarmDataList.size()); + + // 转换报警记录 + List records = alarmDataList.stream() + .map(alarmRecordService::convertFromMap) + .collect(Collectors.toList()); + + // 提取操作记录数据 + Map>> operatorMap = new HashMap<>(); + for (Map recordMap : alarmDataList) { + // 确保Id存在且为有效数字 + Object idObj = recordMap.get("Id"); + if (idObj == null) { + log.warn("跳过缺少Id的告警数据: {}", recordMap); + continue; + } + + Long recordId; + try { + recordId = Long.valueOf(idObj.toString()); + } catch (NumberFormatException e) { + log.warn("告警数据Id格式错误: {}", idObj, e); + continue; + } + + // 处理操作记录 + List> operators = (List>) recordMap.get("TaskOperators"); + if (operators != null && !operators.isEmpty()) { + operatorMap.put(recordId, operators); + } + + // 同步到alarmEvents表 + SisAlarmEventsBo sisAlarmEvents = convertToAlarmEvents(recordMap, recordId); + sisAlarmEventsService.insertByBo(sisAlarmEvents); + } + + // 保存数据(包含操作记录) + return alarmRecordService.saveOrUpdateRecords(records, operatorMap); + } + + /** + * 将原始告警数据转换为SisAlarmEventsBo对象 + */ + private SisAlarmEventsBo convertToAlarmEvents(Map recordMap, Long recordId) { + SisAlarmEventsBo sisAlarmEvents = new SisAlarmEventsBo(); + sisAlarmEvents.setId(recordId); + + // 转换类型和级别 + sisAlarmEvents.setType(convertToLong(recordMap.get("Type"))); + sisAlarmEvents.setLevel(convertToLong(recordMap.get("Level"))); + + // 设备信息 + sisAlarmEvents.setDeviceIp((String) recordMap.get("DeviceSipNum")); + sisAlarmEvents.setDeviceName(Objects.toString(recordMap.get("DeviceName"), "")); + sisAlarmEvents.setDeviceGroupId(convertToLong(recordMap.get("GroupId"))); + sisAlarmEvents.setDeviceGroupName(Objects.toString(recordMap.get("GroupName"), "")); + + // 时间和状态 + sisAlarmEvents.setReportTime((Date) recordMap.get("StartTime")); + sisAlarmEvents.setState(convertToInteger(recordMap.get("State"))); + + // 工单ID(仅当状态为3时) + if (sisAlarmEvents.getState() == 3) { + sisAlarmEvents.setWorkOrderId(convertToLong(recordMap.get("WorkOrderId"))); + } + + return sisAlarmEvents; + } + + /** + * 安全地将对象转换为Long类型 + */ + private Long convertToLong(Object value) { + if (value == null) { + return null; + } + if (value instanceof Number) { + return ((Number) value).longValue(); + } + try { + return Long.valueOf(value.toString()); + } catch (NumberFormatException e) { + log.warn("转换为Long失败: {}", value, e); + return null; + } + } + + /** + * 安全地将对象转换为Integer类型 + */ + private Integer convertToInteger(Object value) { + if (value == null) { + return null; + } + if (value instanceof Number) { + return ((Number) value).intValue(); + } + try { + return Integer.valueOf(value.toString()); + } catch (NumberFormatException e) { + log.warn("转换为Integer失败: {}", value, e); + return null; + } + } +}