Merge branch 'master' of http://47.109.37.87:3000/by2025/SmartParks
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run

This commit is contained in:
lxj
2025-08-12 15:49:15 +08:00
24 changed files with 669 additions and 79 deletions

View File

@@ -120,6 +120,12 @@
<artifactId>sis-api</artifactId> <artifactId>sis-api</artifactId>
<version>2.4.0</version> <version>2.4.0</version>
</dependency> </dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-system</artifactId>
<version>2.4.0</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>

View File

@@ -45,6 +45,9 @@ public class AttendanceArrangementController extends BaseController {
return attendanceArrangementService.queryPageList(bo, pageQuery); return attendanceArrangementService.queryPageList(bo, pageQuery);
} }
/** /**
* 查询某个月的日历排班信息的排班列表 * 查询某个月的日历排班信息的排班列表
*/ */

View File

@@ -6,6 +6,8 @@ import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission; 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.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -103,4 +105,13 @@ public class AttendanceUserGroupController extends BaseController {
@PathVariable("ids") Long[] ids) { @PathVariable("ids") Long[] ids) {
return toAjax(attendanceUserGroupService.deleteWithValidByIds(List.of(ids), true)); return toAjax(attendanceUserGroupService.deleteWithValidByIds(List.of(ids), true));
} }
/**
* 查询排班的班表视图
*/
@SaCheckPermission("Property:userGroup:queryScheduleView")
@GetMapping("/queryScheduleView")
public TableDataInfo<AttendanceUserGroupVo> queryScheduleView(AttendanceUserGroupBo bo, PageQuery pageQuery) {
return attendanceUserGroupService.queryScheduleView(bo, pageQuery);
}
} }

View File

@@ -6,9 +6,6 @@ import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission; 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.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit; 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.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType; import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil; 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; import org.dromara.common.mybatis.core.page.TableDataInfo;
/** /**
* 巡检明细 * 巡检明细
* 前端访问路由地址为:/system/taskDetail * 前端访问路由地址为:/property/taskDetail
* *
* @author mocheng * @author mocheng
* @date 2025-07-15 * @date 2025-08-08
*/ */
@Validated @Validated
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -40,7 +40,7 @@ public class InspectionTaskDetailController extends BaseController {
/** /**
* 查询巡检明细列表 * 查询巡检明细列表
*/ */
//@SaCheckPermission("system:taskDetail:list") @SaCheckPermission("property:taskDetail:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<InspectionTaskDetailVo> list(InspectionTaskDetailBo bo, PageQuery pageQuery) { public TableDataInfo<InspectionTaskDetailVo> list(InspectionTaskDetailBo bo, PageQuery pageQuery) {
return inspectionTaskDetailService.queryPageList(bo, 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) @Log(title = "巡检明细", businessType = BusinessType.EXPORT)
@PostMapping("/export") @PostMapping("/export")
public void export(InspectionTaskDetailBo bo, HttpServletResponse response) { public void export(InspectionTaskDetailBo bo, HttpServletResponse response) {
@@ -62,7 +62,7 @@ public class InspectionTaskDetailController extends BaseController {
* *
* @param id 主键 * @param id 主键
*/ */
@SaCheckPermission("system:taskDetail:query") @SaCheckPermission("property:taskDetail:query")
@GetMapping("/{id}") @GetMapping("/{id}")
public R<InspectionTaskDetailVo> getInfo(@NotNull(message = "主键不能为空") public R<InspectionTaskDetailVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) { @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) @Log(title = "巡检明细", businessType = BusinessType.INSERT)
@RepeatSubmit() @RepeatSubmit()
@PostMapping() @PostMapping()
@@ -83,7 +83,7 @@ public class InspectionTaskDetailController extends BaseController {
/** /**
* 修改巡检明细 * 修改巡检明细
*/ */
@SaCheckPermission("system:taskDetail:edit") @SaCheckPermission("property:taskDetail:edit")
@Log(title = "巡检明细", businessType = BusinessType.UPDATE) @Log(title = "巡检明细", businessType = BusinessType.UPDATE)
@RepeatSubmit() @RepeatSubmit()
@PutMapping() @PutMapping()
@@ -96,7 +96,7 @@ public class InspectionTaskDetailController extends BaseController {
* *
* @param ids 主键串 * @param ids 主键串
*/ */
@SaCheckPermission("system:taskDetail:remove") @SaCheckPermission("property:taskDetail:remove")
@Log(title = "巡检明细", businessType = BusinessType.DELETE) @Log(title = "巡检明细", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}") @DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空") public R<Void> remove(@NotEmpty(message = "主键不能为空")

View File

@@ -4,8 +4,12 @@ import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.dromara.system.domain.SysUser;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial; import java.io.Serial;
import java.time.LocalDate;
import java.util.List;
/** /**
* 排班明细对象 attendance_user_group * 排班明细对象 attendance_user_group
@@ -22,7 +26,7 @@ public class AttendanceUserGroup extends TenantEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
* *
*/ */
@TableId(value = "id") @TableId(value = "id")
private Long id; private Long id;
@@ -37,20 +41,32 @@ public class AttendanceUserGroup extends TenantEntity {
*/ */
private Long employeeId; private Long employeeId;
/** // /**
* 员工姓名 // * 员工姓名
*/ // */
private String employeeName; // private String employeeName;
/** /**
* 部门ID * 部门ID
*/ */
private Long deptId; private Long deptId;
// /**
// * 部门名称
// */
// private String deptName;
/** /**
* 部门名称 * 开始日期
*/ */
private String deptName; private LocalDate startDate;
/**
* 结束日期(仅date_type=3时有效)
*/
private LocalDate endDate;
private SysUser sysUser;
} }

View File

@@ -4,8 +4,10 @@ import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.dromara.common.translation.annotation.Translation;
import java.util.Date; import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.common.translation.constant.TransConstant;
import java.io.Serial; import java.io.Serial;
@@ -13,7 +15,7 @@ import java.io.Serial;
* 巡检明细对象 inspection_task_detail * 巡检明细对象 inspection_task_detail
* *
* @author mocheng * @author mocheng
* @date 2025-07-15 * @date 2025-08-08
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@@ -55,20 +57,60 @@ public class InspectionTaskDetail extends TenantEntity {
private String patrolType; private String patrolType;
/** /**
* 签到类型 * 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码)
*/ */
private String signType; private String signType;
/**
* 实际巡检时间
*/
private Date actualInspectionTime;
/**
* 实际签到状态(1已签到2.未签到)
*/
private String actualSignState;
/** /**
* 巡检状态(0未完成,1已完成) * 巡检状态(0未完成,1已完成)
*/ */
private String inspectionState; private String inspectionState;
/** /**
* 巡检 * 巡检
*/ */
private String inspectionImage; 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 Date pointEndTime;
/**
* 搜索值
*/
private String searchValue;
} }

View File

@@ -105,6 +105,10 @@ public class ServiceWorkOrders extends TenantEntity {
* 工单图片 * 工单图片
*/ */
private String orderImgUrl; private String orderImgUrl;
/**
* 上报类型
*/
private String reportingType;
/** /**
* 备注 * 备注
*/ */

View File

@@ -84,6 +84,10 @@ public class AttendanceArrangementBo extends BaseEntity {
*/ */
private Long status; private Long status;
private List<Long> employeeId;
private List<Long> deptId;
/** /**
* *
* 排班用户组 * 排班用户组

View File

@@ -8,6 +8,9 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
/** /**
* 排班明细业务对象 attendance_user_group * 排班明细业务对象 attendance_user_group
@@ -21,7 +24,7 @@ import jakarta.validation.constraints.*;
public class AttendanceUserGroupBo extends BaseEntity { public class AttendanceUserGroupBo extends BaseEntity {
/** /**
* *
*/ */
@NotNull(message = "不能为空", groups = { EditGroup.class }) @NotNull(message = "不能为空", groups = { EditGroup.class })
private Long id; private Long id;
@@ -36,20 +39,36 @@ public class AttendanceUserGroupBo extends BaseEntity {
*/ */
private Long employeeId; private Long employeeId;
/** // /**
* 员工姓名 // * 员工姓名
*/ // */
private String employeeName; // private String employeeName;
/** /**
* 部门ID * 部门ID
*/ */
private Long deptId; private Long deptId;
// /**
// * 部门名称
// */
// private String deptName;
/** /**
* 部门名称 * 开始日期
*/ */
private String deptName; private LocalDate startDate;
/**
* 结束日期(仅date_type=3时有效)
*/
private LocalDate endDate;
/**
* 前端传某天的当前日期
*/
private LocalDate currentDate;
} }

View File

@@ -1,5 +1,6 @@
package org.dromara.property.domain.bo; package org.dromara.property.domain.bo;
import org.dromara.property.domain.InspectionTaskDetail;
import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup; import org.dromara.common.core.validate.EditGroup;
@@ -7,14 +8,16 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import org.dromara.property.domain.InspectionTaskDetail; import org.dromara.common.translation.annotation.Translation;
import java.util.Date; import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.common.translation.constant.TransConstant;
/** /**
* 巡检明细业务对象 inspection_task_detail * 巡检明细业务对象 inspection_task_detail
* *
* @author mocheng * @author mocheng
* @date 2025-07-15 * @date 2025-08-08
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@@ -55,20 +58,60 @@ public class InspectionTaskDetailBo extends BaseEntity {
private String patrolType; private String patrolType;
/** /**
* 签到类型 * 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码)
*/ */
private String signType; private String signType;
/**
* 实际巡检时间
*/
private Date actualInspectionTime;
/**
* 实际签到状态(1已签到2.未签到)
*/
private String actualSignState;
/** /**
* 巡检状态(0未完成,1已完成) * 巡检状态(0未完成,1已完成)
*/ */
private String inspectionState; private String inspectionState;
/** /**
* 巡检 * 巡检
*/ */
private String inspectionImage; private String inspectionImage;
/**
* 计划巡检人
*/
private String planInspectionPerson;
/**
* 实际巡检人
*/
private String actualInspectionPerson;
/**
* 任务状态
*/
private String taskStatus;
/**
* 巡检结果
*/
private String inspectionResults;
/**
* 巡检描述
*/
private String inspectionDesc;
/**
* 巡检位置
*/
private String inspectionLocation;
/** /**
* 实际巡检时间 * 实际巡检时间
*/ */

View File

@@ -3,6 +3,7 @@ package org.dromara.property.domain.bo;
import cn.idev.excel.annotation.ExcelProperty; import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@@ -26,7 +27,7 @@ public class ServiceWorkOrdersBo extends BaseEntity {
/** /**
* id * id
*/ */
@NotNull(message = "id不能为空", groups = { EditGroup.class }) @NotBlank(message = "id不能为空", groups = { EditGroup.class })
private Long id; 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; private String orderName;
/** /**
* 权重 * 权重
@@ -49,6 +50,11 @@ public class ServiceWorkOrdersBo extends BaseEntity {
*/ */
@NotNull(message = "工单类型不能为空", groups = { EditGroup.class }) @NotNull(message = "工单类型不能为空", groups = { EditGroup.class })
private Long type; private Long type;
/**
* 上报类型
*/
@NotBlank(message = "上报类型不能为空", groups = { EditGroup.class })
private String reportingType;
/** /**
* 状态 * 状态

View File

@@ -1,15 +1,17 @@
package org.dromara.property.domain.vo; 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.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty; import cn.idev.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date; import java.util.Date;
@@ -29,7 +31,7 @@ public class AttendanceUserGroupVo implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
* *
*/ */
@ExcelProperty(value = "") @ExcelProperty(value = "")
private Long id; private Long id;
@@ -46,11 +48,11 @@ public class AttendanceUserGroupVo implements Serializable {
@ExcelProperty(value = "员工ID") @ExcelProperty(value = "员工ID")
private Long employeeId; private Long employeeId;
/** // /**
* 员工姓名 // * 员工姓名
*/ // */
@ExcelProperty(value = "员工姓名") // @ExcelProperty(value = "员工姓名")
private String employeeName; // private String employeeName;
/** /**
* 部门ID * 部门ID
@@ -58,11 +60,31 @@ public class AttendanceUserGroupVo implements Serializable {
@ExcelProperty(value = "部门ID") @ExcelProperty(value = "部门ID")
private Long deptId; private Long deptId;
// /**
// * 部门名称
// */
// @ExcelProperty(value = "部门名称")
// private String deptName;
/** /**
* 部门名称 * 开始日期
*/ */
@ExcelProperty(value = "部门名称") @DateTimeFormat(pattern = "yyyy-MM-dd")
private String deptName; 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;
} }

View File

@@ -1,10 +1,16 @@
package org.dromara.property.domain.vo; 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.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty; 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 io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import org.dromara.property.domain.InspectionTaskDetail;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
@@ -16,7 +22,7 @@ import java.util.Date;
* 巡检明细视图对象 inspection_task_detail * 巡检明细视图对象 inspection_task_detail
* *
* @author mocheng * @author mocheng
* @date 2025-07-15 * @date 2025-08-08
*/ */
@Data @Data
@ExcelIgnoreUnannotated @ExcelIgnoreUnannotated
@@ -63,11 +69,23 @@ public class InspectionTaskDetailVo implements Serializable {
private String patrolType; private String patrolType;
/** /**
* 签到类型 * 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码)
*/ */
@ExcelProperty(value = "签到类型") @ExcelProperty(value = "签到类型(1.现场拍照、2.摄像头签到、3.现场扫码)")
private String signType; private String signType;
/**
* 实际巡检时间
*/
@ExcelProperty(value = "实际巡检时间")
private Date actualInspectionTime;
/**
* 实际签到状态(1已签到2.未签到)
*/
@ExcelProperty(value = "实际签到状态(1已签到2.未签到)")
private String actualSignState;
/** /**
* 巡检状态(0未完成,1已完成) * 巡检状态(0未完成,1已完成)
*/ */
@@ -75,11 +93,52 @@ public class InspectionTaskDetailVo implements Serializable {
private String inspectionState; private String inspectionState;
/** /**
* 巡检 * 巡检
*/ */
@ExcelProperty(value = "巡检") @ExcelProperty(value = "巡检")
private String inspectionImage; 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;
/** /**
* 实际巡检时间 * 实际巡检时间
*/ */

View File

@@ -48,6 +48,10 @@ public class ServiceWorkOrdersInfoVo implements Serializable {
*/ */
@ExcelProperty(value = "工单类型") @ExcelProperty(value = "工单类型")
private Long type; private Long type;
/**
* 上报类型
*/
private String reportingType;
/** /**
* 权重 * 权重
*/ */

View File

@@ -54,6 +54,10 @@ public class ServiceWorkOrdersVo implements Serializable {
*/ */
@ExcelProperty(value = "工单类型") @ExcelProperty(value = "工单类型")
private Long type; private Long type;
/**
* 上报类型
*/
private String reportingType;
/** /**
* 工单类型名称 * 工单类型名称
*/ */

View File

@@ -1,17 +1,15 @@
package org.dromara.property.mapper; 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.InspectionTaskDetail;
import org.dromara.property.domain.vo.InspectionTaskDetailVo; import org.dromara.property.domain.vo.InspectionTaskDetailVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/** /**
* 巡检明细Mapper接口 * 巡检明细Mapper接口
* *
* @author mocheng * @author mocheng
* @date 2025-07-15 * @date 2025-08-08
*/ */
@Mapper
public interface InspectionTaskDetailMapper extends BaseMapperPlus<InspectionTaskDetail, InspectionTaskDetailVo> { public interface InspectionTaskDetailMapper extends BaseMapperPlus<InspectionTaskDetail, InspectionTaskDetailVo> {
} }

View File

@@ -67,4 +67,5 @@ public interface IAttendanceArrangementService {
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
// TableDataInfo<AttendanceArrangementVo> queryScheduleView(AttendanceArrangementBo bo, PageQuery pageQuery);
} }

View File

@@ -1,6 +1,5 @@
package org.dromara.property.service; package org.dromara.property.service;
import org.dromara.property.domain.AttendanceUserGroup;
import org.dromara.property.domain.vo.AttendanceUserGroupVo; import org.dromara.property.domain.vo.AttendanceUserGroupVo;
import org.dromara.property.domain.bo.AttendanceUserGroupBo; import org.dromara.property.domain.bo.AttendanceUserGroupBo;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -66,4 +65,6 @@ public interface IAttendanceUserGroupService {
* @return 是否删除成功 * @return 是否删除成功
*/ */
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
TableDataInfo<AttendanceUserGroupVo> queryScheduleView(AttendanceUserGroupBo bo, PageQuery pageQuery);
} }

View File

@@ -1,9 +1,10 @@
package org.dromara.property.service; 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.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery; 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.Collection;
import java.util.List; import java.util.List;
@@ -12,7 +13,7 @@ import java.util.List;
* 巡检明细Service接口 * 巡检明细Service接口
* *
* @author mocheng * @author mocheng
* @date 2025-07-15 * @date 2025-08-08
*/ */
public interface IInspectionTaskDetailService { public interface IInspectionTaskDetailService {

View File

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils; 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.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; 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.domain.vo.AttendanceArrangementVo;
import org.dromara.property.mapper.*; import org.dromara.property.mapper.*;
import org.dromara.property.service.IAttendanceArrangementService; 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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -54,6 +57,8 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
private final AttendanceScheduleCycleMapper scheduleCycleMapper; private final AttendanceScheduleCycleMapper scheduleCycleMapper;
private final SysUserMapper sysUserMapper;
/** /**
* 查询排班 * 查询排班
* *
@@ -255,6 +260,8 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
return TableDataInfo.build(attendanceArrangementVoPage); return TableDataInfo.build(attendanceArrangementVoPage);
} }
/** /**
* 查询某个月的日历排班信息的排班列表 * 查询某个月的日历排班信息的排班列表
* *
@@ -309,6 +316,15 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
for (AttendanceArrangementVo vo : result) { for (AttendanceArrangementVo vo : result) {
// 根据排班查询出人员组的详细信息 // 根据排班查询出人员组的详细信息
List<AttendanceUserGroup> userGroupList = userGroupMapper.selectList(Wrappers.<AttendanceUserGroup>lambdaQuery().eq(AttendanceUserGroup::getScheduleId, vo.getId())); List<AttendanceUserGroup> userGroupList = userGroupMapper.selectList(Wrappers.<AttendanceUserGroup>lambdaQuery().eq(AttendanceUserGroup::getScheduleId, vo.getId()));
//通过userGroupList查询出人员的详细信息
//将userList存到userGroupList中
userGroupList.forEach(userGroup -> {
SysUser sysUser = sysUserMapper.selectById(userGroup.getEmployeeId());
userGroup.setSysUser(sysUser);
}
);
// 将排班人员信息添加到排班信息中 // 将排班人员信息添加到排班信息中
vo.setUserGroupList(userGroupList); vo.setUserGroupList(userGroupList);
@@ -446,6 +462,8 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
List<AttendanceUserGroup> userGroupList = bo.getUserGroupList(); List<AttendanceUserGroup> userGroupList = bo.getUserGroupList();
for (AttendanceUserGroup userGroup : userGroupList) { for (AttendanceUserGroup userGroup : userGroupList) {
userGroup.setScheduleId(ArrangementId); userGroup.setScheduleId(ArrangementId);
userGroup.setStartDate(bo.getStartDate());
userGroup.setEndDate(bo.getEndDate());
userGroupMapper.insert(userGroup); userGroupMapper.insert(userGroup);
} }
@@ -484,6 +502,13 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
// judgeDate(bo, update); // judgeDate(bo, update);
//根据排班id获取人员id
//根据人员id删除人员信息
//新增人员信息
//根据排班id获取部门id
//根据部门id删除部门信息
//新增部门信息
//取出当前排班的id //取出当前排班的id
assert update != null; assert update != null;
Long ArrangementId = update.getId(); Long ArrangementId = update.getId();
@@ -494,6 +519,13 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
userGroupMapper.delete(Wrappers.<AttendanceUserGroup>lambdaQuery().in(AttendanceUserGroup::getEmployeeId, employeeIdList) userGroupMapper.delete(Wrappers.<AttendanceUserGroup>lambdaQuery().in(AttendanceUserGroup::getEmployeeId, employeeIdList)
.eq(AttendanceUserGroup::getScheduleId, ArrangementId)); .eq(AttendanceUserGroup::getScheduleId, ArrangementId));
//根据排班id获取部门id
List<Long> deptIdList = userGroupMapper.selectList(Wrappers.<AttendanceUserGroup>lambdaQuery().eq(AttendanceUserGroup::getScheduleId, ArrangementId))
.stream().map(AttendanceUserGroup::getDeptId).toList();
//根据deptId和ArrangementId删除attendanceDeptGroup表中的数据
userGroupMapper.delete(Wrappers.<AttendanceUserGroup>lambdaQuery().in(AttendanceUserGroup::getDeptId, deptIdList)
.eq(AttendanceUserGroup::getScheduleId, ArrangementId));
//用获取到的排班id向attendanceUserGroup表中批量插入数据 //用获取到的排班id向attendanceUserGroup表中批量插入数据
List<AttendanceUserGroup> userGroupList = bo.getUserGroupList(); List<AttendanceUserGroup> userGroupList = bo.getUserGroupList();
@@ -570,4 +602,5 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
} }
} }

View File

@@ -9,16 +9,21 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; 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.springframework.stereotype.Service;
import org.dromara.property.domain.bo.AttendanceUserGroupBo; import org.dromara.property.domain.bo.AttendanceUserGroupBo;
import org.dromara.property.domain.vo.AttendanceUserGroupVo; 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 org.dromara.property.service.IAttendanceUserGroupService;
import java.util.List; import java.time.LocalDate;
import java.util.Map; import java.time.ZoneId;
import java.util.Collection; import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
/** /**
* 排班明细Service业务层处理 * 排班明细Service业务层处理
@@ -33,6 +38,16 @@ public class AttendanceUserGroupServiceImpl implements IAttendanceUserGroupServi
private final AttendanceUserGroupMapper baseMapper; 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 排班明细 * @return 排班明细
*/ */
@Override @Override
public AttendanceUserGroupVo queryById(Long id){ public AttendanceUserGroupVo queryById(Long id) {
return baseMapper.selectVoById(id); return baseMapper.selectVoById(id);
} }
@@ -76,9 +91,9 @@ public class AttendanceUserGroupServiceImpl implements IAttendanceUserGroupServi
lqw.orderByAsc(AttendanceUserGroup::getId); lqw.orderByAsc(AttendanceUserGroup::getId);
lqw.eq(bo.getScheduleId() != null, AttendanceUserGroup::getScheduleId, bo.getScheduleId()); lqw.eq(bo.getScheduleId() != null, AttendanceUserGroup::getScheduleId, bo.getScheduleId());
lqw.eq(bo.getEmployeeId() != null, AttendanceUserGroup::getEmployeeId, bo.getEmployeeId()); 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.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; return lqw;
} }
@@ -115,7 +130,7 @@ public class AttendanceUserGroupServiceImpl implements IAttendanceUserGroupServi
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */
private void validEntityBeforeSave(AttendanceUserGroup entity){ private void validEntityBeforeSave(AttendanceUserGroup entity) {
//TODO 做一些数据校验,如唯一约束 //TODO 做一些数据校验,如唯一约束
} }
@@ -128,9 +143,109 @@ public class AttendanceUserGroupServiceImpl implements IAttendanceUserGroupServi
*/ */
@Override @Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){ if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验 //TODO 做一些业务上的校验,判断是否需要校验
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }
/**
* 查询排班的班表视图
*/
@Override
public TableDataInfo<AttendanceUserGroupVo> queryScheduleView(AttendanceUserGroupBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<AttendanceUserGroup> lqw = buildQueryWrapper(bo);
//查询当前日期在哪些人员组中,当前日期大于等于人员组开始日期,小于等于人员组结束日期
LambdaQueryWrapper<AttendanceUserGroup> ge = lqw
.le(AttendanceUserGroup::getStartDate, bo.getCurrentDate())
.ge(AttendanceUserGroup::getEndDate, bo.getCurrentDate());
Page<AttendanceUserGroupVo> result = baseMapper.selectVoPage(pageQuery.build(), ge);
Page<AttendanceUserGroupVo> 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<AttendanceUserGroup> userGroupList = baseMapper.selectList(Wrappers.<AttendanceUserGroup>lambdaQuery().eq(AttendanceUserGroup::getScheduleId, scheduleId));
//根据scheduleId查询出排班的详细信息
AttendanceArrangement attendanceArrangement = arrangementMapper.selectOne(Wrappers.<AttendanceArrangement>lambdaQuery().eq(AttendanceArrangement::getId, scheduleId));
// 假设每个vo只有一个scheduleId
Long userGroupListScheduleId = attendanceArrangement.getId();
AttendanceArrangement arrangement = arrangementMapper.selectOne(Wrappers.<AttendanceArrangement>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<AttendanceWeekSet> weekSetList = weekSetMapper.selectList(Wrappers.<AttendanceWeekSet>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<Integer> cycleDaysList = scheduleCycleMapper.selectList(Wrappers.<AttendanceScheduleCycle>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.<AttendanceScheduleCycle>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);
}
} }

View File

@@ -9,13 +9,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; 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.bo.InspectionTaskDetailBo;
import org.dromara.property.domain.vo.InspectionTaskDetailVo; import org.dromara.property.domain.vo.InspectionTaskDetailVo;
import org.dromara.property.domain.InspectionTaskDetail;
import org.dromara.property.mapper.InspectionTaskDetailMapper; import org.dromara.property.mapper.InspectionTaskDetailMapper;
import org.dromara.property.service.IInspectionTaskDetailService; import org.dromara.property.service.IInspectionTaskDetailService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -25,7 +24,7 @@ import java.util.Collection;
* 巡检明细Service业务层处理 * 巡检明细Service业务层处理
* *
* @author mocheng * @author mocheng
* @date 2025-07-15 * @date 2025-08-08
*/ */
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -81,7 +80,16 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer
lqw.eq(bo.getPointId() != null, InspectionTaskDetail::getPointId, bo.getPointId()); lqw.eq(bo.getPointId() != null, InspectionTaskDetail::getPointId, bo.getPointId());
lqw.eq(StringUtils.isNotBlank(bo.getPatrolType()), InspectionTaskDetail::getPatrolType, bo.getPatrolType()); lqw.eq(StringUtils.isNotBlank(bo.getPatrolType()), InspectionTaskDetail::getPatrolType, bo.getPatrolType());
lqw.eq(StringUtils.isNotBlank(bo.getSignType()), InspectionTaskDetail::getSignType, bo.getSignType()); 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.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.getInspectionTime() != null, InspectionTaskDetail::getInspectionTime, bo.getInspectionTime());
lqw.eq(bo.getPointStartTime() != null, InspectionTaskDetail::getPointStartTime, bo.getPointStartTime()); lqw.eq(bo.getPointStartTime() != null, InspectionTaskDetail::getPointStartTime, bo.getPointStartTime());
lqw.eq(bo.getPointEndTime() != null, InspectionTaskDetail::getPointEndTime, bo.getPointEndTime()); lqw.eq(bo.getPointEndTime() != null, InspectionTaskDetail::getPointEndTime, bo.getPointEndTime());
@@ -96,7 +104,6 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer
* @return 是否新增成功 * @return 是否新增成功
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(InspectionTaskDetailBo bo) { public Boolean insertByBo(InspectionTaskDetailBo bo) {
InspectionTaskDetail add = MapstructUtils.convert(bo, InspectionTaskDetail.class); InspectionTaskDetail add = MapstructUtils.convert(bo, InspectionTaskDetail.class);
validEntityBeforeSave(add); validEntityBeforeSave(add);
@@ -114,7 +121,6 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer
* @return 是否修改成功 * @return 是否修改成功
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateByBo(InspectionTaskDetailBo bo) { public Boolean updateByBo(InspectionTaskDetailBo bo) {
InspectionTaskDetail update = MapstructUtils.convert(bo, InspectionTaskDetail.class); InspectionTaskDetail update = MapstructUtils.convert(bo, InspectionTaskDetail.class);
validEntityBeforeSave(update); validEntityBeforeSave(update);
@@ -136,7 +142,6 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer
* @return 是否删除成功 * @return 是否删除成功
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){ if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验 //TODO 做一些业务上的校验,判断是否需要校验

View File

@@ -247,13 +247,11 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
ordersLambdaQueryWrapper.eq(ServiceWorkOrdersRecord::getStatus, entity.getStatus()); ordersLambdaQueryWrapper.eq(ServiceWorkOrdersRecord::getStatus, entity.getStatus());
boolean exists = workOrdersRecordMapper.exists(ordersLambdaQueryWrapper); boolean exists = workOrdersRecordMapper.exists(ordersLambdaQueryWrapper);
//TODO 做一些数据校验,如唯一约束 //TODO 做一些数据校验,如唯一约束
if (!exists) {
ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord(); ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord();
serviceWorkOrdersRecord.setOrderId(entity.getId()); serviceWorkOrdersRecord.setOrderId(entity.getId());
serviceWorkOrdersRecord.setStatus(entity.getStatus()); serviceWorkOrdersRecord.setStatus(entity.getStatus());
serviceWorkOrdersRecord.setHandler(entity.getHandler()); serviceWorkOrdersRecord.setHandler(entity.getHandler());
workOrdersRecordMapper.insert(serviceWorkOrdersRecord); workOrdersRecordMapper.insert(serviceWorkOrdersRecord);
}
} }
/** /**

View File

@@ -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<Map<String, Object>> pushSingleAlarm(@RequestBody Map<String, Object> alarmData) {
try {
// 处理单条数据
processAlarmData(Collections.singletonList(alarmData));
Map<String, Object> 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<Map<String, Object>> pushBatchAlarms(@RequestBody List<Map<String, Object>> alarmDataList) {
if (alarmDataList == null || alarmDataList.isEmpty()) {
return ResponseEntity.badRequest().body(Collections.singletonMap("error", "推送数据不能为空"));
}
try {
int processedCount = processAlarmData(alarmDataList);
Map<String, Object> 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<Map<String, Object>> alarmDataList) {
log.info("开始处理推送的告警数据,共 {} 条", alarmDataList.size());
// 转换报警记录
List<AlarmRecord> records = alarmDataList.stream()
.map(alarmRecordService::convertFromMap)
.collect(Collectors.toList());
// 提取操作记录数据
Map<Long, List<Map<String, Object>>> operatorMap = new HashMap<>();
for (Map<String, Object> 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<Map<String, Object>> operators = (List<Map<String, Object>>) 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<String, Object> 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;
}
}
}