| | |
| | | import com.ruoyi.process.dto.QualityMonitorDetailsDto; |
| | | import com.ruoyi.process.dto.QualityMonitorDto; |
| | | import com.ruoyi.process.mapper.QualityMonitorDetailsEvaluateFileMapper; |
| | | import com.ruoyi.process.mapper.QualityMonitorDetailsEvaluateMapper; |
| | | import com.ruoyi.process.pojo.*; |
| | | import com.ruoyi.process.service.QualityMonitorDetailsService; |
| | | import com.ruoyi.process.service.QualityMonitorService; |
| | | import com.ruoyi.process.service.QualityMonitorTaskService; |
| | | import com.ruoyi.process.service.QualityMonitorInspectionEvaluationService; |
| | | import com.ruoyi.inspect.pojo.InsOrder; |
| | | import com.ruoyi.system.mapper.UserMapper; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import lombok.AllArgsConstructor; |
| | |
| | | |
| | | import jakarta.annotation.Resource; |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import java.util.LinkedHashSet; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | |
| | | /** |
| | |
| | | @RequestMapping("/qualityMonitor") |
| | | public class QualityMonitorController { |
| | | |
| | | @Operation(summary = "新建年度质量控制计划") |
| | | @PostMapping("/createAnnualPlan") |
| | | public Result<QualityMonitorDto> createAnnualPlan(@RequestBody QualityMonitor qualityMonitor) { |
| | | return Result.success(qualityMonitorService.createAnnualPlan(qualityMonitor)); |
| | | } |
| | | |
| | | @Operation(summary = "按年度查询当前质量控制计划") |
| | | @GetMapping("/getAnnualPlan") |
| | | public Result<QualityMonitorDto> getAnnualPlan(String monitorYear, Integer qualityMonitorId) { |
| | | return Result.success(qualityMonitorService.getAnnualPlan(monitorYear, qualityMonitorId)); |
| | | } |
| | | |
| | | @Operation(summary = "提交年度质量控制计划审核") |
| | | @PostMapping("/submitAnnualPlan") |
| | | public Result submitAnnualPlan(@RequestBody Map<String, Integer> request) { |
| | | return Result.success(qualityMonitorService.submitAnnualPlan(request.get("qualityMonitorId"))); |
| | | } |
| | | |
| | | @Resource |
| | | private QualityMonitorService qualityMonitorService; |
| | | |
| | |
| | | |
| | | @Resource |
| | | private QualityMonitorDetailsEvaluateFileMapper qualityMonitorDetailsEvaluateFileMapper; |
| | | |
| | | @Resource |
| | | private QualityMonitorDetailsEvaluateMapper qualityMonitorDetailsEvaluateMapper; |
| | | |
| | | @Resource |
| | | private QualityMonitorTaskService qualityMonitorTaskService; |
| | | |
| | | @Resource |
| | | private QualityMonitorInspectionEvaluationService inspectionEvaluationService; |
| | | |
| | | @Resource |
| | | private UserMapper userMapper; |
| | | |
| | | @Operation(summary = "获取质量监控检验评价") |
| | | @GetMapping("/getInspectionEvaluation") |
| | | public Result<QualityMonitorDetailsEvaluate> getInspectionEvaluation(Integer qualityMonitorDetailsId) { |
| | | return Result.success(inspectionEvaluationService.get(qualityMonitorDetailsId)); |
| | | } |
| | | |
| | | @Operation(summary = "提交质量监控检验评价") |
| | | @PostMapping("/submitInspectionEvaluation") |
| | | public Result<QualityMonitorDetailsEvaluate> submitInspectionEvaluation(@RequestBody QualityMonitorDetailsEvaluate evaluation) { |
| | | return Result.success(inspectionEvaluationService.submit(evaluation)); |
| | | } |
| | | |
| | | @Operation(summary = "批准或退回质量监控检验评价") |
| | | @PostMapping("/approveInspectionEvaluation") |
| | | public Result approveInspectionEvaluation(@RequestBody Map<String, Object> request) { |
| | | Integer detailId = (Integer) request.get("qualityMonitorDetailsId"); |
| | | boolean approved = Boolean.TRUE.equals(request.get("approved")); |
| | | inspectionEvaluationService.approve(detailId, approved, (String) request.get("opinion")); |
| | | return Result.success(); |
| | | } |
| | | |
| | | @Operation(summary = "下发质量监控检验任务") |
| | | @PostMapping("/dispatchInspectionTask") |
| | | public Result<InsOrder> dispatchInspectionTask(@RequestBody Map<String, Integer> request) { |
| | | return Result.success(qualityMonitorTaskService.dispatch(request.get("qualityMonitorDetailsId"))); |
| | | } |
| | | |
| | | @Operation(summary = "查询质量监控明细关联的检验任务") |
| | | @GetMapping("/getInspectionTask") |
| | | public Result<InsOrder> getInspectionTask(Integer qualityMonitorDetailsId) { |
| | | return Result.success(qualityMonitorTaskService.getTask(qualityMonitorDetailsId)); |
| | | } |
| | | |
| | | @Operation(summary = "取消未开始的质量监控检验任务") |
| | | @PostMapping("/cancelInspectionTask") |
| | | public Result cancelInspectionTask(@RequestBody Map<String, Integer> request) { |
| | | qualityMonitorTaskService.cancel(request.get("qualityMonitorDetailsId")); |
| | | return Result.success(); |
| | | } |
| | | |
| | | /** |
| | | * 导入监控计划 |
| | |
| | | if (qualityMonitorDetails.getQualityMonitorId() == null) { |
| | | throw new ErrorException("缺少监控计划主表id"); |
| | | } |
| | | qualityMonitorService.validateDetailEditable(qualityMonitorDetails.getQualityMonitorId()); |
| | | normalizeTemplateIds(qualityMonitorDetails); |
| | | validateAnnualDetail(qualityMonitorDetails); |
| | | if (qualityMonitorDetails.getSortNo() == null) { |
| | | qualityMonitorDetails.setSortNo((int) qualityMonitorDetailsService.count( |
| | | com.baomidou.mybatisplus.core.toolkit.Wrappers.<QualityMonitorDetails>lambdaQuery() |
| | | .eq(QualityMonitorDetails::getQualityMonitorId, qualityMonitorDetails.getQualityMonitorId())) + 1); |
| | | } |
| | | return Result.success(qualityMonitorDetailsService.save(qualityMonitorDetails)); |
| | | } |
| | | |
| | |
| | | @Operation(summary = "修改监控计划详情") |
| | | @PostMapping("/updateQualityMonitorDetail") |
| | | public Result updateQualityMonitorDetail(@RequestBody QualityMonitorDetails qualityMonitorDetails) { |
| | | QualityMonitorDetails stored = qualityMonitorDetailsService.getById(qualityMonitorDetails.getQualityMonitorDetailsId()); |
| | | if (stored == null) throw new ErrorException("质控项目不存在"); |
| | | qualityMonitorDetails.setQualityMonitorId(stored.getQualityMonitorId()); |
| | | qualityMonitorService.validateDetailEditable(stored.getQualityMonitorId()); |
| | | normalizeTemplateIds(qualityMonitorDetails); |
| | | validateAnnualDetail(qualityMonitorDetails); |
| | | if (qualityMonitorTaskService.getTask(qualityMonitorDetails.getQualityMonitorDetailsId()) != null) { |
| | | throw new ErrorException("已下发检验任务的计划明细不可直接修改"); |
| | | } |
| | | return Result.success(qualityMonitorDetailsService.updateById(qualityMonitorDetails)); |
| | | } |
| | | |
| | |
| | | @Operation(summary = "删除监控计划详情") |
| | | @DeleteMapping("/delQualityMonitorDetail") |
| | | public Result delQualityMonitorDetail(Integer qualityMonitorDetailsId) { |
| | | QualityMonitorDetails stored = qualityMonitorDetailsService.getById(qualityMonitorDetailsId); |
| | | if (stored == null) throw new ErrorException("质控项目不存在"); |
| | | qualityMonitorService.validateDetailEditable(stored.getQualityMonitorId()); |
| | | if (qualityMonitorTaskService.getTask(qualityMonitorDetailsId) != null) { |
| | | throw new ErrorException("已下发检验任务的计划明细不可删除"); |
| | | } |
| | | return Result.success(qualityMonitorDetailsService.removeById(qualityMonitorDetailsId)); |
| | | } |
| | | |
| | | private void validateAnnualDetail(QualityMonitorDetails detail) { |
| | | if (!org.springframework.util.StringUtils.hasText(detail.getMonitorProject()) |
| | | || !org.springframework.util.StringUtils.hasText(detail.getTechnicalStandardText()) |
| | | || !org.springframework.util.StringUtils.hasText(detail.getMonitorWay()) |
| | | || !org.springframework.util.StringUtils.hasText(detail.getCompletionMonth()) |
| | | || !detail.getCompletionMonth().matches("\\d{4}-\\d{2}") |
| | | || detail.getResponsibleUserId() == null) { |
| | | throw new ErrorException("请补齐质控项目、技术标准、质控方式、完成时限和负责人"); |
| | | } |
| | | QualityMonitor plan = qualityMonitorService.getById(detail.getQualityMonitorId()); |
| | | if (plan == null || !detail.getCompletionMonth().startsWith(plan.getMonitorYear() + "-")) { |
| | | throw new ErrorException("完成时限必须属于当前计划年度"); |
| | | } |
| | | int month = Integer.parseInt(detail.getCompletionMonth().substring(5)); |
| | | if (month < 1 || month > 12) throw new ErrorException("完成时限月份不正确"); |
| | | if (userMapper.selectById(detail.getResponsibleUserId()) == null) { |
| | | throw new ErrorException("负责人不存在"); |
| | | } |
| | | } |
| | | |
| | | private void normalizeTemplateIds(QualityMonitorDetails detail) { |
| | | String rawIds = detail.getTemplateIds(); |
| | | if (!org.springframework.util.StringUtils.hasText(rawIds) && detail.getTemplateId() != null) { |
| | | rawIds = String.valueOf(detail.getTemplateId()); |
| | | } |
| | | if (!org.springframework.util.StringUtils.hasText(rawIds)) { |
| | | detail.setTemplateIds(null); |
| | | detail.setTemplateId(null); |
| | | return; |
| | | } |
| | | Set<Integer> templateIds = new LinkedHashSet<>(); |
| | | try { |
| | | for (String rawId : rawIds.split(",")) { |
| | | if (!org.springframework.util.StringUtils.hasText(rawId)) continue; |
| | | int templateId = Integer.parseInt(rawId.trim()); |
| | | if (templateId <= 0) throw new NumberFormatException(); |
| | | templateIds.add(templateId); |
| | | } |
| | | } catch (NumberFormatException exception) { |
| | | throw new ErrorException("原始记录模板参数不正确"); |
| | | } |
| | | if (templateIds.size() > 50) throw new ErrorException("原始记录模板最多选择50个"); |
| | | if (templateIds.isEmpty()) { |
| | | detail.setTemplateIds(null); |
| | | detail.setTemplateId(null); |
| | | return; |
| | | } |
| | | detail.setTemplateIds(templateIds.stream().map(String::valueOf).collect(Collectors.joining(","))); |
| | | detail.setTemplateId(templateIds.iterator().next()); |
| | | } |
| | | |
| | | /** |
| | |
| | | @Operation(summary = "新增监控评价") |
| | | @PostMapping("/addQualityMonitorEvaluate") |
| | | public Result addQualityMonitorEvaluate(@RequestBody QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) { |
| | | if (qualityMonitorTaskService.getTask(qualityMonitorDetailsEvaluate.getQualityMonitorDetailsId()) != null) { |
| | | throw new ErrorException("质量监控检验评价请使用检验评价入口"); |
| | | } |
| | | return Result.success(qualityMonitorService.addQualityMonitorEvaluate(qualityMonitorDetailsEvaluate)); |
| | | } |
| | | |
| | |
| | | @Operation(summary = "监控评价批准意见") |
| | | @PostMapping("/addMonitorEvaluateOpinion") |
| | | public Result addMonitorEvaluateOpinion(@RequestBody QualityMonitorDetailsEvaluate qualityMonitorDetailsEvaluate) { |
| | | QualityMonitorDetailsEvaluate stored = qualityMonitorDetailsEvaluateMapper.selectById(qualityMonitorDetailsEvaluate.getDetailsEvaluateId()); |
| | | if (stored != null && qualityMonitorTaskService.getTask(stored.getQualityMonitorDetailsId()) != null) { |
| | | throw new ErrorException("质量监控检验评价请使用检验评价审批入口"); |
| | | } |
| | | return Result.success(qualityMonitorService.addMonitorEvaluateOpinion(qualityMonitorDetailsEvaluate)); |
| | | } |
| | | |
| | |
| | | @Operation(summary = "上传监控完成报告") |
| | | @PostMapping("/uploadFinishReport") |
| | | public Result uploadFinishReport(MultipartFile file, Integer qualityMonitorDetailsId) { |
| | | if (qualityMonitorTaskService.getTask(qualityMonitorDetailsId) != null) { |
| | | throw new ErrorException("质量监控检验任务无需上传完成报告"); |
| | | } |
| | | return Result.success(qualityMonitorService.uploadFinishReport(file, qualityMonitorDetailsId)); |
| | | } |
| | | |
| | |
| | | @Operation(summary = "批准完成报告") |
| | | @PostMapping("/ratifyFinishReport") |
| | | public Result ratifyFinishReport(@RequestBody QualityMonitorDetails qualityMonitorDetails) { |
| | | if (qualityMonitorTaskService.getTask(qualityMonitorDetails.getQualityMonitorDetailsId()) != null) { |
| | | throw new ErrorException("质量监控检验任务无需批准完成报告"); |
| | | } |
| | | return Result.success(qualityMonitorService.ratifyFinishReport(qualityMonitorDetails)); |
| | | } |
| | | } |