package com.ruoyi.web.controller.api; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.system.dto.EditHiddenDangerResponsiblePersonDto; import com.ruoyi.system.enums.DeviceType; import com.ruoyi.system.model.*; import com.ruoyi.system.model.Record; import com.ruoyi.system.query.*; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.parsing.Problem; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; import static java.util.stream.Collectors.groupingBy; @RestController @RequestMapping("/project") @Api(tags = "项目信息") public class ProjectController { @Autowired private ProjectService projectService; @Autowired private DeviceUsageService deviceUsageService; @Autowired private ProjectInfoService projectInfoService; @Autowired private TaskService taskService; @Autowired private RecordService recordService; @Autowired private CheckService checkService; @Autowired private OnDutyService onDutyService; @Autowired private PositionService positionService; @Autowired private PlanService planService; @Autowired private ScreenAccountService screenAccountService; @ApiOperation(value = "获取项目/委托方列表",response = LoginNameVo.class) @GetMapping("/getLoginNameVoList") public R> getProjectList(@RequestParam Integer userId) { ScreenAccount screenAccount = screenAccountService.getById(userId); String clientProjectIds = screenAccount.getClientProjectIds(); if(screenAccount.getType()==1){ // 委托方 List list = screenAccountService.getLoginClient(clientProjectIds); return R.ok(list); }else { // 项目 List list = screenAccountService.getLoginProject(clientProjectIds); return R.ok(list); } } @ApiOperation(value = "获取项目详情",response = Project.class) @GetMapping("/getProjectDetail/{id}") public R getStoryDetail(@PathVariable Integer id) { ProjectVo projectVo = new ProjectVo(); Project project = projectService.getById(id); BeanUtils.copyProperties(project,projectVo); List properties = deviceUsageService.getDeviceUsageList(id); projectVo.setProperties( properties); ProjectInfo projectInfo = projectInfoService.getOne(new LambdaUpdateWrapper().eq(ProjectInfo::getProjectId, id).eq(ProjectInfo::getDeleted,false).orderByDesc(ProjectInfo::getCreateTime).last("limit 1")); if(projectInfo!=null){ projectVo.setProgress(projectInfo.getProgress()); } Task task = taskService.getOne(new LambdaUpdateWrapper().eq(Task::getProjectId, id).orderByDesc(Task::getUpdateTime).last("limit 1")); if(task!=null){ projectVo.setCheckTime(task.getUpdateTime()); } return R.ok(projectVo); } @ApiOperation(value = "获取项目隐患数量",response = HiddenDangerVo.class) @GetMapping("/getProjectHiddenDangerCount/{id}") public R getProjectHiddenDangerCount(@PathVariable Integer id) { HiddenDangerVo hiddenDangerVo = new HiddenDangerVo(); List list = taskService.list(new LambdaQueryWrapper().eq(Task::getProjectId, id)); if(!list.isEmpty()){ List taskIds = list.stream().map(Task::getId).collect(Collectors.toList()); // 0是一级隐患 List records = recordService.list(new LambdaQueryWrapper().eq(Record::getLevel, 0).eq(Record::getDeleted, 0).in(Record::getCheckTaskId, taskIds)); hiddenDangerVo.setSerious(records.size()); int rectified = records.stream().filter(Record::getReformed).collect(Collectors.toList()).size(); hiddenDangerVo.setRectified(rectified); hiddenDangerVo.setUnRectified(records.size()-rectified); } return R.ok(hiddenDangerVo); } @ApiOperation(value = "获取设备数量",response = DeviceCountVo.class) @GetMapping("/getProjectDeviceCount/{id}") public R> getProjectDeviceCount(@PathVariable Integer id) { List list = deviceUsageService.getProjectDeviceCount(id); return R.ok(list); } @ApiOperation(value = "获取隐患列表",response = HiddenDangerListVo.class) @PostMapping("/getHiddenDangerList") public R> getHiddenDangerList(@RequestBody @Valid HiddenDangerListQuery query) { List tasks = taskService.list(new LambdaQueryWrapper().eq(Task::getProjectId, query.getProjectId())); if(tasks.isEmpty()){ return R.ok(new Page<>()); } List taskIds = tasks.stream().map(Task::getId).collect(Collectors.toList()); Page page = new Page<>(query.getPageNum(), query.getPageSize()); List list = recordService.getHiddenDangerList(page,query,taskIds); page.setRecords(list); return R.ok(page); } @ApiOperation(value = "编辑隐患责任人") @PostMapping("/editHiddenDangerResponsiblePerson") public R editHiddenDangerResponsiblePerson(@RequestBody @Valid EditHiddenDangerResponsiblePersonDto dto) { Record record = recordService.getById(dto.getId()); if(record==null){ return R.fail("隐患不存在"); } record.setResponsiblePerson(dto.getResponsiblePerson()); recordService.updateById(record); return R.ok(); } @ApiOperation(value = "获取隐患详情") @GetMapping("/getHiddenDangerDetail/{problemId}") public R getHiddenDangerDetail(@PathVariable Integer problemId) { var record = recordService.getHiddenDangerDetail(problemId); return R.ok(record); } @ApiOperation(value = "获取设备列表",response = DeviceListVo.class) @PostMapping("/getDeviceList") public R> getDeviceList(@RequestBody @Valid DeviceListQuery query) { Page page = new Page<>(query.getPageNum(), query.getPageSize()); List list = deviceUsageService.getDeviceList(page,query); page.setRecords(list); return R.ok(page); } @ApiOperation(value = "获取检查计划列表",response = DeviceDetailCheckListVo.class) @PostMapping("/getDeviceDetailCheckList") public R> getDeviceDetailCheckList(@RequestBody DeviceDetailCheckListQuery query) { Page page = new Page<>(query.getPageNum(), query.getPageSize()); List list = projectService.getDeviceDetailCheckList(page,query); page.setRecords(list); return R.ok(page); } @ApiOperation(value = "获取检查资料列表") @GetMapping("/getDeviceDetailCheckPlanList") public R> getDeviceDetailCheckPlanList(@RequestParam Integer planId) { List list = checkService.list(new LambdaQueryWrapper().eq(Check::getPlanId,planId).orderByDesc(Check::getTime)); if(!list.isEmpty()){ List planIds = list.stream().map(Check::getPlanId).toList(); List plans = planService.listByIds(planIds); List projectIds = list.stream().map(Check::getProjectId).toList(); List projects = projectService.listByIds(projectIds); list.forEach(check -> { check.setPlanName(Objects.requireNonNull(plans.stream().filter(plan -> plan.getId().equals(check.getPlanId())).findFirst().orElse(null)).getName()); check.setProjectName(Objects.requireNonNull(projects.stream().filter(project -> project.getId().equals(check.getProjectId())).findFirst().orElse(null)).getName()); }); } return R.ok(list); } @ApiOperation(value = "获取检查资料详情") @GetMapping("/getDeviceDetailCheckPlanDetail") public R getDeviceDetailCheckPlanDetail(@RequestParam Integer id) { Check check = checkService.getDeviceDetailCheckPlanDetail(id); return R.ok(check); } @ApiOperation(value = "获取大屏人员在岗信息") @GetMapping("/getProjectPersonInfo") public R> getProjectPersonInfo(@RequestParam Integer projectId) { List list = onDutyService.list(new LambdaQueryWrapper().eq(OnDuty::getProjectId,projectId)); Map> map = list.stream().collect(groupingBy(OnDuty::getPositionId)); List resultList = new ArrayList<>(); // map循环 for (Map.Entry> entry : map.entrySet()){ Integer key = entry.getKey(); Position position = positionService.getById(key); ProjectPersonInfoVo projectPersonInfoVo = new ProjectPersonInfoVo(); projectPersonInfoVo.setPostName(position.getName()); List 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> getPositionList() { List list = positionService.list(new LambdaQueryWrapper().eq(Position::getDeleted, false)); return R.ok(list); } @ApiOperation(value = "获取计划下拉框信息",response = Plan.class) @GetMapping("/getPlanList") public R> getPlanList() { List list = planService.list(new LambdaQueryWrapper().eq(Plan::getDeleted, false)); return R.ok(list); } @ApiOperation(value = "获取人员在岗列表",response = ProjectPersonOnDutyListVo.class) @PostMapping("/getProjectOnDutyList") public R> getProjectOnDutyList(@RequestBody @Valid ProjectPersonListQuery query) { Page page = new Page<>(query.getPageNum(), query.getPageSize()); List 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); } @ApiOperation(value = "获取项目大屏最新重大风险源",response = ProjectInfo.class) @GetMapping("/getProjectDangerousSource") public R getProjectDangerousSource(@RequestParam Integer projectId) { ProjectInfo projectInfo = projectInfoService.getOne(new LambdaQueryWrapper().eq(ProjectInfo::getProjectId,projectId).eq(ProjectInfo::getDeleted, false).orderByDesc(ProjectInfo::getCreateTime).last("limit 1")); return R.ok(projectInfo); } @ApiOperation(value = "获取项目重大风险源列表") @PostMapping("/getProjectDangerousSourceList") public R> getProjectDangerousSourceList(@RequestBody @Valid ProjectDangerousSourceListQuery query) { Page page = new Page<>(query.getPageNum(), query.getPageSize()); LambdaQueryWrapper wrapper = new LambdaQueryWrapper().eq(ProjectInfo::getProjectId, query.getProjectId()).eq(ProjectInfo::getDeleted, false); if(query.getStartTime()!=null && !query.getStartTime().isEmpty()){ wrapper.ge(ProjectInfo::getCreateTime, query.getStartTime()); } if(query.getEndTime()!=null && !query.getEndTime().isEmpty()){ wrapper.le(ProjectInfo::getCreateTime, query.getEndTime()); } if(query.getContent()!=null && !query.getContent().isEmpty()){ wrapper.like(ProjectInfo::getDetail, query.getContent()); } Page list = projectInfoService.page(page,wrapper); return R.ok(list); } @ApiOperation(value = "获取项目重大风险源详情") @GetMapping("/getProjectDangerousSourceDetail/{id}") public R getProjectDangerousSourceDetail(@PathVariable Integer id) { ProjectInfo projectInfo = projectInfoService.getById(id); return R.ok(projectInfo); } @ApiOperation(value = "设备类型") @GetMapping("/deviceTypes") public R deviceTypeOptions(@RequestParam(value = "title", required = false) String title) { return R.ok(SelectOptionVo.buildOptions(title, DeviceType.values())); } @ApiOperation(value = "各分项隐患趋势") @GetMapping("/getProjectHiddenDangerTrend") public R> getProjectHiddenDangerTrend(@RequestParam Integer projectId,@RequestParam(value = "desc", required = true) Boolean desc,@RequestParam(value = "type", required = true)Integer type) { List list = projectInfoService.getProjectHiddenDangerTrend(projectId); if(type==1){ if(desc){ list = list.stream().sorted(Comparator.comparingInt(ProjectHiddenDangerTrendVo::getThisMonth).reversed()).toList(); }else { list = list.stream().sorted(Comparator.comparingInt(ProjectHiddenDangerTrendVo::getThisMonth)).toList(); } }else { if(desc){ list = list.stream().sorted(Comparator.comparingDouble(ProjectHiddenDangerTrendVo::getRate).reversed()).toList(); }else { list = list.stream().sorted(Comparator.comparingDouble(ProjectHiddenDangerTrendVo::getRate)).toList(); } } return R.ok(list); } @ApiOperation(value = "各分项隐患趋势列表") @PostMapping("/getProjectHiddenDangerTrendList") public R> getProjectHiddenDangerTrendList(@RequestBody @Valid ProjectHiddenDangerTrendListQuery query) { List list = projectInfoService.getProjectHiddenDangerTrendList(query); return R.ok(list); } @ApiOperation(value = "大屏风险趋势") @PostMapping("/getProjectDangerousTrend") public R> getProjectDangerousTrend(@RequestBody @Valid ProjectDangerousTrendQuery query) { List list = projectInfoService.getProjectDangerousTrend(query); return R.ok(list); } }