liujie
2026-01-19 ae6d707075bbb673755ac150356590ae83ff75da
大屏项目接口
16个文件已添加
9个文件已修改
705 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/CheckMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceUsageMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/OnDutyMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/PlanMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/Check.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/Plan.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/DeviceDetailCheckPlanListQuery.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/ProjectPersonListQuery.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/CheckService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/DeviceUsageService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/OnDutyService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/PlanService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CheckServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceUsageServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OnDutyServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/PlanServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/DeviceCountVo.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/DeviceDetailCheckPlanListVo.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/ProjectPersonInfoVo.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/ProjectPersonOnDutyListVo.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/CheckMapper.xml 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/DeviceUsageMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/OnDutyMapper.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/PlanMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java
@@ -7,9 +7,7 @@
import com.ruoyi.system.dto.EditHiddenDangerResponsiblePersonDto;
import com.ruoyi.system.model.*;
import com.ruoyi.system.model.Record;
import com.ruoyi.system.query.DeviceDetailCheckListQuery;
import com.ruoyi.system.query.DeviceListQuery;
import com.ruoyi.system.query.HiddenDangerListQuery;
import com.ruoyi.system.query.*;
import com.ruoyi.system.service.*;
import com.ruoyi.system.vo.*;
import io.swagger.annotations.Api;
@@ -21,8 +19,14 @@
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.groupingBy;
@RestController
@RequestMapping("/project")
@@ -44,6 +48,19 @@
    @Autowired
    private RecordService recordService;
    @Autowired
    private CheckService checkService;
    @Autowired
    private OnDutyService onDutyService;
    @Autowired
    private PositionService positionService;
    @Autowired
    private PlanService planService;
@@ -70,7 +87,7 @@
    }
    @ApiOperation(value = "获取项目隐患数量",response = Project.class)
    @ApiOperation(value = "获取项目隐患数量",response = HiddenDangerVo.class)
    @GetMapping("/getProjectHiddenDangerCount/{id}")
    public R<HiddenDangerVo> getProjectHiddenDangerCount(@PathVariable Integer id) {
        HiddenDangerVo hiddenDangerVo = new HiddenDangerVo();
@@ -85,6 +102,13 @@
            hiddenDangerVo.setUnRectified(records.size()-rectified);
        }
        return R.ok(hiddenDangerVo);
    }
    @ApiOperation(value = "获取设备数量",response = DeviceCountVo.class)
    @GetMapping("/getProjectDeviceCount/{id}")
    public R<List<DeviceCountVo>> getProjectDeviceCount(@PathVariable Integer id) {
        List<DeviceCountVo> list = deviceUsageService.getProjectDeviceCount(id);
        return R.ok(list);
    }
@@ -137,7 +161,7 @@
    }
    @ApiOperation(value = "获取设备详情检查列表")
    @ApiOperation(value = "获取设备详情检查列表",response = DeviceDetailCheckListVo.class)
    @PostMapping("/getDeviceDetailCheckList")
    public R<Page<DeviceDetailCheckListVo>> getDeviceDetailCheckList(@RequestBody DeviceDetailCheckListQuery query) {
        Page<DeviceDetailCheckListVo> page = new Page<>(query.getPageNum(), query.getPageSize());
@@ -145,4 +169,78 @@
        page.setRecords(list);
        return R.ok(page);
    }
    @ApiOperation(value = "获取设备详情检查资料列表")
    @GetMapping("/getDeviceDetailCheckPlanList")
    public R<List<Check>> getDeviceDetailCheckPlanList(@RequestParam Integer planId) {
        List<Check> list = checkService.list(new LambdaQueryWrapper<Check>().eq(Check::getPlanId,planId).orderByDesc(Check::getTime));
        return R.ok(list);
    }
    @ApiOperation(value = "获取设备详情检查资料详情")
    @GetMapping("/getDeviceDetailCheckPlanDetail")
    public R<Check> getDeviceDetailCheckPlanDetail(@RequestParam Integer id) {
        Check check = checkService.getDeviceDetailCheckPlanDetail(id);
        return R.ok(check);
    }
    @ApiOperation(value = "获取大屏人员在岗信息")
    @GetMapping("/getProjectPersonInfo")
    public R<List<ProjectPersonInfoVo>> getProjectPersonInfo(@RequestParam Integer projectId) {
        List<OnDuty> list = onDutyService.list(new LambdaQueryWrapper<OnDuty>().eq(OnDuty::getProjectId,projectId));
        Map<Integer, List<OnDuty>> map = list.stream().collect(groupingBy(OnDuty::getPositionId));
        List<ProjectPersonInfoVo> resultList = new ArrayList<>();
        // map循环
        for (Map.Entry<Integer, List<OnDuty>> entry : map.entrySet()){
            Integer key = entry.getKey();
            Position position = positionService.getById(key);
            ProjectPersonInfoVo projectPersonInfoVo = new ProjectPersonInfoVo();
            projectPersonInfoVo.setPostName(position.getName());
            List<OnDuty> onDuties = entry.getValue();
            long count = onDuties.stream().filter(e -> e.getState() == 1).count();
            int size = onDuties.size();
            BigDecimal rate = BigDecimal.valueOf(count).divide(BigDecimal.valueOf(size), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP);
            projectPersonInfoVo.setRate(rate.toString());
            resultList.add(projectPersonInfoVo);
        }
        return R.ok(resultList);
    }
    @ApiOperation(value = "获取岗位下拉框信息",response = Position.class)
    @GetMapping("/getPositionList")
    public R<List<Position>> getPositionList() {
        List<Position> list = positionService.list(new LambdaQueryWrapper<Position>().eq(Position::getDeleted, false));
        return R.ok(list);
    }
    @ApiOperation(value = "获取计划下拉框信息",response = Plan.class)
    @GetMapping("/getPlanList")
    public R<List<Plan>> getPlanList() {
        List<Plan> list = planService.list(new LambdaQueryWrapper<Plan>().eq(Plan::getDeleted, false));
        return R.ok(list);
    }
    @ApiOperation(value = "获取人员在岗列表",response = ProjectPersonOnDutyListVo.class)
    @PostMapping("/getProjectOnDutyList")
    public R<Page<ProjectPersonOnDutyListVo>> getProjectOnDutyList(@RequestBody @Valid ProjectPersonListQuery query) {
        Page<ProjectPersonOnDutyListVo> page = new Page<>(query.getPageNum(), query.getPageSize());
        List<ProjectPersonOnDutyListVo> list = onDutyService.getProjectOnDutyList(page,query);
        page.setRecords(list);
        return R.ok(page);
    }
    @ApiOperation(value = "获取人员在岗详情")
    @GetMapping("/getProjectOnDutyDetail/{id}")
    public R<?> getProjectOnDutyDetail(@PathVariable Integer id) {
        ProjectPersonOnDutyListVo vo = onDutyService.getProjectOnDutyDetail(id);
        return R.ok(vo);
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/CheckMapper.java
New file
@@ -0,0 +1,27 @@
package com.ruoyi.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.system.model.Check;
import com.ruoyi.system.query.DeviceDetailCheckPlanListQuery;
import com.ruoyi.system.vo.DeviceDetailCheckPlanListVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * 检查情况 Mapper 接口
 * </p>
 *
 * @author administrator
 * @since 2026-01-19
 */
public interface CheckMapper extends BaseMapper<Check> {
    List<DeviceDetailCheckPlanListVo> getDeviceDetailCheckPlanList(@Param("page") Page<DeviceDetailCheckPlanListVo> page, @Param("query") DeviceDetailCheckPlanListQuery query);
    Check getDeviceDetailCheckPlanDetail(@Param("id") Integer id);
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceUsageMapper.java
@@ -6,6 +6,7 @@
import com.ruoyi.system.model.DeviceUsage;
import com.ruoyi.system.model.Record;
import com.ruoyi.system.query.DeviceListQuery;
import com.ruoyi.system.vo.DeviceCountVo;
import com.ruoyi.system.vo.DeviceListVo;
import org.apache.ibatis.annotations.Param;
@@ -27,5 +28,6 @@
    List<DeviceListVo> getDeviceList(@Param("page") Page<DeviceListVo> page, @Param("query") DeviceListQuery query);
    List<DeviceCountVo> getProjectDeviceCount(@Param("id") Integer id);
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/OnDutyMapper.java
@@ -1,7 +1,13 @@
package com.ruoyi.system.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.system.model.OnDuty;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.system.query.ProjectPersonListQuery;
import com.ruoyi.system.vo.ProjectPersonOnDutyListVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
@@ -13,4 +19,8 @@
 */
public interface OnDutyMapper extends BaseMapper<OnDuty> {
    List<ProjectPersonOnDutyListVo> getProjectOnDutyList(@Param("page") Page<ProjectPersonOnDutyListVo> page, @Param("query") ProjectPersonListQuery query);
    ProjectPersonOnDutyListVo getProjectOnDutyDetail(@Param("id") Integer id);
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/PlanMapper.java
New file
@@ -0,0 +1,14 @@
package com.ruoyi.system.mapper;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author administrator
 * @since 2026-01-19
 */
public interface PlanMapper extends BaseMapper<Plan> {
}
ruoyi-system/src/main/java/com/ruoyi/system/model/Check.java
New file
@@ -0,0 +1,96 @@
package com.ruoyi.system.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 检查情况
 * </p>
 *
 * @author administrator
 * @since 2026-01-19
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("check_info")
public class Check extends Model<Check> {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 计划id
     */
    @TableField("plan_id")
    private Integer planId;
    /**
     * 项目id
     */
    @TableField("project_id")
    private Integer projectId;
    /**
     * 委托方id
     */
    @TableField("client_id")
    private Integer clientId;
    /**
     * 安全告知单
     */
    @TableField("safety_slip")
    @ApiModelProperty("安全告知单")
    private String safetySlip;
    /**
     * 检查人员照片
     */
    @TableField("check_user_img")
    @ApiModelProperty("检查人员照片")
    private String checkUserImg;
    /**
     * 廉政告知单
     */
    @TableField("integrity_notification")
    @ApiModelProperty("廉政告知单")
    private String integrityNotification;
    /**
     * 检查时间
     */
    @TableField("time")
    @ApiModelProperty("检查时间")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date time;
    @TableField("create_time")
    private Date createTime;
    @TableField("title")
    @ApiModelProperty("检查标题")
    private String title;
    @TableField(exist = false)
    @ApiModelProperty("计划名称")
    private String planName;
    @TableField(exist = false)
    @ApiModelProperty("项目名称")
    private String projectName;
}
ruoyi-system/src/main/java/com/ruoyi/system/model/Plan.java
New file
@@ -0,0 +1,62 @@
package com.ruoyi.system.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 *
 * </p>
 *
 * @author administrator
 * @since 2026-01-19
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class Plan extends Model<Plan> {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @TableField("create_time")
    private Date createTime;
    private Boolean deleted;
    private String name;
    @TableField("update_time")
    private Date updateTime;
    @TableField("completed_time")
    private Date completedTime;
    private Integer state;
    private Integer type;
    @TableField("creator_id")
    private Integer creatorId;
    @TableField("client_id")
    private Integer clientId;
    @TableField("device_fuzzy_math_id")
    private Integer deviceFuzzyMathId;
    @TableField("device_model_id")
    private Integer deviceModelId;
    @TableField("device_score_expert_id")
    private Integer deviceScoreExpertId;
    @TableField("system_fuzzy_expert_id")
    private Integer systemFuzzyExpertId;
    @TableField("system_model_id")
    private Integer systemModelId;
    @TableField("system_score_expert_id")
    private Integer systemScoreExpertId;
    @TableField("project_id")
    private Integer projectId;
}
ruoyi-system/src/main/java/com/ruoyi/system/query/DeviceDetailCheckPlanListQuery.java
New file
@@ -0,0 +1,16 @@
package com.ruoyi.system.query;
import com.ruoyi.common.core.domain.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
@ApiModel("设备详情检查计划列表查询参数")
public class DeviceDetailCheckPlanListQuery extends BasePage {
    @ApiModelProperty("计划id")
    @NotNull(message = "计划id不能为空")
    private Integer planId;
}
ruoyi-system/src/main/java/com/ruoyi/system/query/ProjectPersonListQuery.java
New file
@@ -0,0 +1,31 @@
package com.ruoyi.system.query;
import com.ruoyi.common.core.domain.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
@ApiModel("项目人员在岗列表查询参数")
public class ProjectPersonListQuery extends BasePage {
    @ApiModelProperty(value = "项目id")
    @NotNull(message = "项目id不能为空")
    private Integer projectId;
    @ApiModelProperty(value = "岗位id")
    private Integer positionId;
    @ApiModelProperty(value = "计划id")
    private Integer planId;
    @ApiModelProperty(value = "开始时间")
    private String startTime;
    @ApiModelProperty(value = "结束时间")
    private String endTime;
    @ApiModelProperty(value = "搜索内容")
    private String remark;
}
ruoyi-system/src/main/java/com/ruoyi/system/service/CheckService.java
New file
@@ -0,0 +1,27 @@
package com.ruoyi.system.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.model.Check;
import com.ruoyi.system.query.DeviceDetailCheckPlanListQuery;
import com.ruoyi.system.vo.DeviceDetailCheckPlanListVo;
import javax.validation.Valid;
import java.util.List;
/**
 * <p>
 * 检查情况 服务类
 * </p>
 *
 * @author administrator
 * @since 2026-01-19
 */
public interface CheckService extends IService<Check> {
    List<DeviceDetailCheckPlanListVo> getDeviceDetailCheckPlanList(Page<DeviceDetailCheckPlanListVo> page, @Valid DeviceDetailCheckPlanListQuery query);
    Check getDeviceDetailCheckPlanDetail(Integer id);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/DeviceUsageService.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.model.DeviceUsage;
import com.ruoyi.system.query.DeviceListQuery;
import com.ruoyi.system.vo.DeviceCountVo;
import com.ruoyi.system.vo.DeviceListVo;
import javax.validation.Valid;
@@ -24,4 +25,6 @@
    List<DeviceListVo> getDeviceList(Page<DeviceListVo> page, @Valid DeviceListQuery query);
    List<DeviceCountVo> getProjectDeviceCount(Integer id);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/OnDutyService.java
@@ -1,7 +1,13 @@
package com.ruoyi.system.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.system.model.OnDuty;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.query.ProjectPersonListQuery;
import com.ruoyi.system.vo.ProjectPersonOnDutyListVo;
import javax.validation.Valid;
import java.util.List;
/**
 * <p>
@@ -13,4 +19,8 @@
 */
public interface OnDutyService extends IService<OnDuty> {
    List<ProjectPersonOnDutyListVo> getProjectOnDutyList(Page<ProjectPersonOnDutyListVo> page, @Valid ProjectPersonListQuery query);
    ProjectPersonOnDutyListVo getProjectOnDutyDetail(Integer id);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/PlanService.java
New file
@@ -0,0 +1,17 @@
package com.ruoyi.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.model.Plan;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author administrator
 * @since 2026-01-19
 */
public interface PlanService extends IService<Plan> {
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CheckServiceImpl.java
New file
@@ -0,0 +1,35 @@
package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.system.mapper.CheckMapper;
import com.ruoyi.system.model.Check;
import com.ruoyi.system.query.DeviceDetailCheckPlanListQuery;
import com.ruoyi.system.service.CheckService;
import com.ruoyi.system.vo.DeviceDetailCheckPlanListVo;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 * 检查情况 服务实现类
 * </p>
 *
 * @author administrator
 * @since 2026-01-19
 */
@Service
public class CheckServiceImpl extends ServiceImpl<CheckMapper, Check> implements CheckService {
    @Override
    public List<DeviceDetailCheckPlanListVo> getDeviceDetailCheckPlanList(Page<DeviceDetailCheckPlanListVo> page, DeviceDetailCheckPlanListQuery query) {
        return this.baseMapper.getDeviceDetailCheckPlanList(page, query);
    }
    @Override
    public Check getDeviceDetailCheckPlanDetail(Integer id) {
        return this.baseMapper.getDeviceDetailCheckPlanDetail(id);
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceUsageServiceImpl.java
@@ -8,6 +8,7 @@
import com.ruoyi.system.model.Record;
import com.ruoyi.system.query.DeviceListQuery;
import com.ruoyi.system.service.DeviceUsageService;
import com.ruoyi.system.vo.DeviceCountVo;
import com.ruoyi.system.vo.DeviceListVo;
import org.springframework.stereotype.Service;
@@ -49,5 +50,10 @@
        return deviceList;
    }
    @Override
    public List<DeviceCountVo> getProjectDeviceCount(Integer id) {
        return this.baseMapper.getProjectDeviceCount(id);
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OnDutyServiceImpl.java
@@ -1,10 +1,15 @@
package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.system.model.OnDuty;
import com.ruoyi.system.mapper.OnDutyMapper;
import com.ruoyi.system.query.ProjectPersonListQuery;
import com.ruoyi.system.service.OnDutyService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.system.vo.ProjectPersonOnDutyListVo;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
@@ -17,4 +22,13 @@
@Service
public class OnDutyServiceImpl extends ServiceImpl<OnDutyMapper, OnDuty> implements OnDutyService {
    @Override
    public List<ProjectPersonOnDutyListVo> getProjectOnDutyList(Page<ProjectPersonOnDutyListVo> page, ProjectPersonListQuery query) {
        return this.baseMapper.getProjectOnDutyList(page,query);
    }
    @Override
    public ProjectPersonOnDutyListVo getProjectOnDutyDetail(Integer id) {
        return this.baseMapper.getProjectOnDutyDetail(id);
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/PlanServiceImpl.java
New file
@@ -0,0 +1,19 @@
package com.ruoyi.system.service.impl;
import com.ruoyi.system.model.Plan;
import com.ruoyi.system.service.PlanService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author administrator
 * @since 2026-01-19
 */
@Service
public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements PlanService {
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/DeviceCountVo.java
New file
@@ -0,0 +1,15 @@
package com.ruoyi.system.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("设备数量信息")
public class DeviceCountVo {
    @ApiModelProperty("设备数量")
    private Integer count;
    @ApiModelProperty("设备类型")
    private Integer type;
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/DeviceDetailCheckPlanListVo.java
New file
@@ -0,0 +1,25 @@
package com.ruoyi.system.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@ApiModel("设备详情检查计划列表")
public class DeviceDetailCheckPlanListVo {
    private Integer id;
    @ApiModelProperty("计划名称")
    private String planName;
    @ApiModelProperty("计划类型")
    private Integer planType;
    @ApiModelProperty("检查时间")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDateTime checkTime;
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/ProjectPersonInfoVo.java
New file
@@ -0,0 +1,16 @@
package com.ruoyi.system.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("项目人员信息")
public class ProjectPersonInfoVo {
    @ApiModelProperty("岗位名称")
    private String postName;
    @ApiModelProperty("在岗位率")
    private String rate;
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/ProjectPersonOnDutyListVo.java
New file
@@ -0,0 +1,39 @@
package com.ruoyi.system.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@ApiModel("项目人员在岗列表")
public class ProjectPersonOnDutyListVo {
    private Integer id;
    @ApiModelProperty(value = "检查计划名称")
    private String planName;
    @ApiModelProperty(value = "检查内容")
    private String checkContent;
    @ApiModelProperty(value = "岗位名称")
    private String postName;
    @ApiModelProperty(value = "问题备注")
    private String remark;
    @ApiModelProperty(value = "检查结果图片")
    private String img;
    @ApiModelProperty(value = "检查时间")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDateTime time;
    @ApiModelProperty(value = "在岗情况 1在岗 2未在岗 3请假")
    private Integer state;
}
ruoyi-system/src/main/resources/mapper/system/CheckMapper.xml
New file
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.CheckMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.system.model.Check">
        <id column="id" property="id" />
        <result column="plan_id" property="planId" />
        <result column="project_id" property="projectId" />
        <result column="client_id" property="clientId" />
        <result column="safety_slip" property="safetySlip" />
        <result column="check_user_img" property="checkUserImg" />
        <result column="integrity_notification" property="integrityNotification" />
        <result column="time" property="time" />
        <result column="create_time" property="createTime" />
    </resultMap>
    <select id="getDeviceDetailCheckPlanList" resultType="com.ruoyi.system.vo.DeviceDetailCheckPlanListVo">
        select t2.name as planName,t2.type as planType,t1.time as checkTime from check t1 left join plan t2 on t1.plan_id = t2.id
        where t1.project_id = #{query.projectId}
        <if test="query.planType != null">
            and t2.type = #{query.planType}
        </if>
        <if test="query.planName != null">
            and t2.name like concat('%',#{query.planName},'%')
        </if>
        <if test="query.startTime != null ">
            and t1.time >= #{query.startTime}
        </if>
        <if test="query.endTime != null">
            and  #{query.endTime} >= t1.time
        </if>
        order by t1.time desc
    </select>
    <select id="getDeviceDetailCheckPlanDetail" resultType="com.ruoyi.system.model.Check"
            parameterType="java.lang.Integer">
        select t1.id,t1.title,t1.time,t1.safety_slip,t1.check_user_img,t1.integrity_notification ,t2.name as planName,t3.name as projectName
        from check_info t1
        left join plan t2 on t1.plan_id = t2.id
        left join project t3 on t1.project_id = t3.id
        where t1.id = #{id}
    </select>
</mapper>
ruoyi-system/src/main/resources/mapper/system/DeviceUsageMapper.xml
@@ -45,5 +45,15 @@
        </if>
        order by latest.record_time desc
    </select>
    <select id="getProjectDeviceCount" resultType="com.ruoyi.system.vo.DeviceCountVo"
            parameterType="java.lang.Integer">
        select t1.type, count(t1.id) as count
        from device t1
            left join device_usage t2
        on t1.id = t2.device_id
        where t2.project_id = #{projectId} and t2.deleted = 0
        group by t1.type
    </select>
</mapper>
ruoyi-system/src/main/resources/mapper/system/OnDutyMapper.xml
@@ -22,5 +22,36 @@
    <sql id="Base_Column_List">
        id, plan_id, project_id, client_id, content, position_id, position_name, remark, img, time, state, create_time
    </sql>
    <select id="getProjectOnDutyList" resultType="com.ruoyi.system.vo.ProjectPersonOnDutyListVo">
        select t1.id,t2.name as planName,t1.content,t3.name as postName,t1.remark,t1.img,t1.time,t1.state
        from on_duty t1
        left join plan t2 on t1.plan_id = t2.id
        left join position t3 on t1.position_id = t3.id
        where t1.project_id = #{query.projectId}
        <if test="query.planId != null">
            and t1.plan_id = #{query.planId}
        </if>
        <if test="query.positionId != null">
            and t1.position_id = #{query.positionId}
        </if>
        <if test="query.startTime != null">
            and t1.time >= #{query.startTime}
        </if>
        <if test="query.endTime != null">
            and #{query.endTime} >= t1.time
        </if>
        <if test="query.remark != null">
            and t1.remark like concat('%',#{query.remark},'%')
        </if>
        order by t1.time desc
    </select>
    <select id="getProjectOnDutyDetail" resultType="com.ruoyi.system.vo.ProjectPersonOnDutyListVo"
            parameterType="java.lang.Integer">
        select t1.id,t2.name as planName,t1.content,t3.name as postName,t1.remark,t1.img,t1.time,t1.state
        from on_duty t1
                 left join plan t2 on t1.plan_id = t2.id
                 left join position t3 on t1.position_id = t3.id
        where t1.id =#{id}
    </select>
</mapper>
ruoyi-system/src/main/resources/mapper/system/PlanMapper.xml
New file
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.PlanMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.system.model.Plan">
        <id column="id" property="id" />
        <result column="create_time" property="createTime" />
        <result column="deleted" property="deleted" />
        <result column="name" property="name" />
        <result column="update_time" property="updateTime" />
        <result column="completed_time" property="completedTime" />
        <result column="state" property="state" />
        <result column="type" property="type" />
        <result column="creator_id" property="creatorId" />
        <result column="client_id" property="clientId" />
        <result column="device_fuzzy_math_id" property="deviceFuzzyMathId" />
        <result column="device_model_id" property="deviceModelId" />
        <result column="device_score_expert_id" property="deviceScoreExpertId" />
        <result column="system_fuzzy_expert_id" property="systemFuzzyExpertId" />
        <result column="system_model_id" property="systemModelId" />
        <result column="system_score_expert_id" property="systemScoreExpertId" />
        <result column="project_id" property="projectId" />
    </resultMap>
</mapper>