feat(infection): 手卫生+环境+耐药菌监测

This commit is contained in:
2026-06-18 11:08:42 +08:00
parent 4d37f44b04
commit c5a252f41d
3 changed files with 259 additions and 226 deletions

View File

@@ -0,0 +1,19 @@
package com.healthlink.his.web.infection.appservice;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.healthlink.his.infection.domain.*;
import java.util.Map;
public interface IInfectionEnhancedAppService {
Page<HandHygiene> getHandHygienePage(String departmentName, int pageNo, int pageSize);
HandHygiene recordHandHygiene(Map<String, Object> params);
Map<String, Object> getHandHygieneStats(Long departmentId);
Page<EnvironmentalMonitor> getEnvironmentalPage(String departmentName, String monitorType, String result, int pageNo, int pageSize);
EnvironmentalMonitor recordEnvironmental(Map<String, Object> params);
Map<String, Object> getEnvironmentalStats();
Page<MultiDrugResistant> getMultiDrugPage(String patientName, String bacteriaName, Integer isolationStatus, int pageNo, int pageSize);
MultiDrugResistant recordMultiDrug(Map<String, Object> params);
}

View File

@@ -0,0 +1,185 @@
package com.healthlink.his.web.infection.appservice.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.healthlink.his.infection.domain.*;
import com.healthlink.his.infection.service.*;
import com.healthlink.his.web.infection.appservice.IInfectionEnhancedAppService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Slf4j
@AllArgsConstructor
public class InfectionEnhancedAppServiceImpl implements IInfectionEnhancedAppService {
private final IHandHygieneService handHygieneService;
private final IEnvironmentalMonitorService envMonitorService;
private final IMultiDrugResistantService mdrService;
// ==================== 手卫生 ====================
@Override
public Page<HandHygiene> getHandHygienePage(String departmentName, int pageNo, int pageSize) {
LambdaQueryWrapper<HandHygiene> wrapper = new LambdaQueryWrapper<>();
wrapper.like(StringUtils.hasText(departmentName), HandHygiene::getDepartmentName, departmentName)
.orderByDesc(HandHygiene::getMonitorDate);
return handHygieneService.page(new Page<>(pageNo, pageSize), wrapper);
}
@Override
@Transactional(rollbackFor = Exception.class)
public HandHygiene recordHandHygiene(Map<String, Object> params) {
log.info("记录手卫生监测数据");
HandHygiene hh = new HandHygiene();
hh.setDepartmentId(params.get("departmentId") != null ? Long.valueOf(params.get("departmentId").toString()) : null);
hh.setDepartmentName(getStr(params, "departmentName"));
hh.setMonitorDate(params.get("monitorDate") != null ? parseDate(params.get("monitorDate").toString()) : null);
hh.setObserveCount(parseInt(params.get("observeCount"), 0));
hh.setComplyCount(parseInt(params.get("complyCount"), 0));
hh.setObserverName(getStr(params, "observerName"));
hh.setRemarks(getStr(params, "remarks"));
hh.setCreateTime(new Date());
if (hh.getObserveCount() > 0 && hh.getComplyCount() != null) {
hh.setComplyRate(BigDecimal.valueOf(hh.getComplyCount())
.divide(BigDecimal.valueOf(hh.getObserveCount()), 4, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100))
.setScale(2, RoundingMode.HALF_UP));
} else {
hh.setComplyRate(BigDecimal.ZERO);
}
handHygieneService.save(hh);
return hh;
}
@Override
public Map<String, Object> getHandHygieneStats(Long departmentId) {
LambdaQueryWrapper<HandHygiene> wrapper = new LambdaQueryWrapper<>();
if (departmentId != null) {
wrapper.eq(HandHygiene::getDepartmentId, departmentId);
}
List<HandHygiene> list = handHygieneService.list(wrapper);
int totalObserve = 0, totalComply = 0;
for (HandHygiene hh : list) {
totalObserve += hh.getObserveCount() != null ? hh.getObserveCount() : 0;
totalComply += hh.getComplyCount() != null ? hh.getComplyCount() : 0;
}
Map<String, Object> stats = new HashMap<>();
stats.put("totalObserve", totalObserve);
stats.put("totalComply", totalComply);
stats.put("overallRate", totalObserve > 0 ?
BigDecimal.valueOf(totalComply).divide(BigDecimal.valueOf(totalObserve), 4, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO);
stats.put("recordCount", list.size());
return stats;
}
// ==================== 环境卫生学监测 ====================
@Override
public Page<EnvironmentalMonitor> getEnvironmentalPage(String departmentName, String monitorType, String result, int pageNo, int pageSize) {
LambdaQueryWrapper<EnvironmentalMonitor> wrapper = new LambdaQueryWrapper<>();
wrapper.like(StringUtils.hasText(departmentName), EnvironmentalMonitor::getDepartmentName, departmentName)
.eq(StringUtils.hasText(monitorType), EnvironmentalMonitor::getMonitorType, monitorType)
.eq(StringUtils.hasText(result), EnvironmentalMonitor::getResult, result)
.orderByDesc(EnvironmentalMonitor::getMonitorDate);
return envMonitorService.page(new Page<>(pageNo, pageSize), wrapper);
}
@Override
@Transactional(rollbackFor = Exception.class)
public EnvironmentalMonitor recordEnvironmental(Map<String, Object> params) {
log.info("记录环境卫生学监测数据");
EnvironmentalMonitor env = new EnvironmentalMonitor();
env.setDepartmentId(params.get("departmentId") != null ? Long.valueOf(params.get("departmentId").toString()) : null);
env.setDepartmentName(getStr(params, "departmentName"));
env.setMonitorType(getStr(params, "monitorType"));
env.setMonitorItem(getStr(params, "monitorItem"));
env.setMonitorDate(params.get("monitorDate") != null ? parseDate(params.get("monitorDate").toString()) : null);
env.setStandardValue(getStr(params, "standardValue"));
env.setActualValue(getStr(params, "actualValue"));
env.setResult(getStr(params, "result"));
env.setTesterName(getStr(params, "testerName"));
env.setRemarks(getStr(params, "remarks"));
env.setCreateTime(new Date());
envMonitorService.save(env);
return env;
}
@Override
public Map<String, Object> getEnvironmentalStats() {
Map<String, Object> stats = new HashMap<>();
stats.put("total", envMonitorService.count());
LambdaQueryWrapper<EnvironmentalMonitor> wq = new LambdaQueryWrapper<>();
wq.eq(EnvironmentalMonitor::getResult, "合格");
stats.put("qualified", envMonitorService.count(wq));
wq.clear();
wq.eq(EnvironmentalMonitor::getResult, "不合格");
stats.put("unqualified", envMonitorService.count(wq));
return stats;
}
// ==================== 多重耐药菌 ====================
@Override
public Page<MultiDrugResistant> getMultiDrugPage(String patientName, String bacteriaName, Integer isolationStatus, int pageNo, int pageSize) {
LambdaQueryWrapper<MultiDrugResistant> wrapper = new LambdaQueryWrapper<>();
wrapper.like(StringUtils.hasText(patientName), MultiDrugResistant::getPatientName, patientName)
.like(StringUtils.hasText(bacteriaName), MultiDrugResistant::getBacteriaName, bacteriaName)
.eq(isolationStatus != null, MultiDrugResistant::getIsolationStatus, isolationStatus)
.orderByDesc(MultiDrugResistant::getReportDate);
return mdrService.page(new Page<>(pageNo, pageSize), wrapper);
}
@Override
@Transactional(rollbackFor = Exception.class)
public MultiDrugResistant recordMultiDrug(Map<String, Object> params) {
log.info("记录多重耐药菌数据");
MultiDrugResistant mdr = new MultiDrugResistant();
mdr.setPatientId(params.get("patientId") != null ? Long.valueOf(params.get("patientId").toString()) : null);
mdr.setPatientName(getStr(params, "patientName"));
mdr.setEncounterId(params.get("encounterId") != null ? Long.valueOf(params.get("encounterId").toString()) : null);
mdr.setDepartmentId(params.get("departmentId") != null ? Long.valueOf(params.get("departmentId").toString()) : null);
mdr.setDepartmentName(getStr(params, "departmentName"));
mdr.setBacteriaName(getStr(params, "bacteriaName"));
mdr.setResistanceType(getStr(params, "resistanceType"));
mdr.setSpecimenType(getStr(params, "specimenType"));
mdr.setSpecimenDate(params.get("specimenDate") != null ? parseDate(params.get("specimenDate").toString()) : null);
mdr.setReportDate(params.get("reportDate") != null ? parseDate(params.get("reportDate").toString()) : null);
mdr.setIsolationStatus(0);
mdr.setTreatmentPlan(getStr(params, "treatmentPlan"));
mdr.setOutcome(getStr(params, "outcome"));
mdr.setStatus(0);
mdr.setCreateTime(new Date());
mdrService.save(mdr);
return mdr;
}
// ==================== 工具方法 ====================
private Date parseDate(String s) {
try { return new java.text.SimpleDateFormat("yyyy-MM-dd").parse(s); }
catch (Exception e) { return null; }
}
private int parseInt(Object val, int defaultVal) {
if (val == null) return defaultVal;
try { return Integer.parseInt(val.toString()); }
catch (NumberFormatException e) { return defaultVal; }
}
private String getStr(Map<String, Object> params, String key) {
Object v = params.get(key);
return v != null ? v.toString() : null;
}
}

View File

@@ -1,187 +1,86 @@
package com.healthlink.his.web.infection.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.healthlink.his.infection.domain.*;
import com.healthlink.his.infection.service.*;
import com.healthlink.his.web.infection.appservice.IInfectionEnhancedAppService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.Map;
/**
* 院感管理增强Controller
* 补全: 暴发预警、目标性监测、手卫生监测、多重耐药菌、环境卫生学监测
*/
@Tag(name = "院感管理增强")
@RestController
@RequestMapping("/infection-enhanced")
@Slf4j
@AllArgsConstructor
public class InfectionEnhancedController {
private final IOutbreakWarningService outbreakService;
private final ITargetedSurveillanceService surveillanceService;
private final IHandHygieneService handHygieneService;
private final IMultiDrugResistantService mdrService;
private final IEnvironmentalMonitorService envMonitorService;
// ==================== 暴发预警 ====================
@GetMapping("/outbreak/page")
public R<?> getOutbreakPage(
@RequestParam(value = "departmentName", required = false) String departmentName,
@RequestParam(value = "status", required = false) Integer status,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
LambdaQueryWrapper<OutbreakWarning> wrapper = new LambdaQueryWrapper<>();
wrapper.like(StringUtils.hasText(departmentName), OutbreakWarning::getDepartmentName, departmentName)
.eq(status != null, OutbreakWarning::getStatus, status)
.orderByDesc(OutbreakWarning::getCreateTime);
return R.ok(outbreakService.page(new Page<>(pageNo, pageSize), wrapper));
}
@PostMapping("/outbreak/add")
@Transactional(rollbackFor = Exception.class)
public R<?> addOutbreak(@RequestBody OutbreakWarning warning) {
warning.setStatus(0);
warning.setCreateTime(new Date());
outbreakService.save(warning);
return R.ok(warning);
}
@PostMapping("/outbreak/handle")
@Transactional(rollbackFor = Exception.class)
public R<?> handleOutbreak(@RequestBody Map<String, Object> params) {
Long id = Long.valueOf(params.get("id").toString());
String result = (String) params.get("handleResult");
OutbreakWarning warning = outbreakService.getById(id);
if (warning == null) return R.fail("预警记录不存在");
warning.setStatus(2);
warning.setHandleResult(result);
warning.setHandleTime(new Date());
warning.setUpdateTime(new Date());
outbreakService.updateById(warning);
return R.ok();
}
@PostMapping("/outbreak/exclude")
@Transactional(rollbackFor = Exception.class)
public R<?> excludeOutbreak(@RequestParam Long id, @RequestParam(required = false) String reason) {
OutbreakWarning warning = outbreakService.getById(id);
if (warning == null) return R.fail("预警记录不存在");
warning.setStatus(3);
warning.setHandleResult("排除: " + (reason != null ? reason : "误报"));
warning.setHandleTime(new Date());
warning.setUpdateTime(new Date());
outbreakService.updateById(warning);
return R.ok();
}
// ==================== 目标性监测 ====================
@GetMapping("/surveillance/page")
public R<?> getSurveillancePage(
@RequestParam(value = "surveillanceType", required = false) Integer type,
@RequestParam(value = "departmentName", required = false) String deptName,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
LambdaQueryWrapper<TargetedSurveillance> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(type != null, TargetedSurveillance::getSurveillanceType, type)
.like(StringUtils.hasText(deptName), TargetedSurveillance::getDepartmentName, deptName)
.orderByDesc(TargetedSurveillance::getStartDate);
return R.ok(surveillanceService.page(new Page<>(pageNo, pageSize), wrapper));
}
@PostMapping("/surveillance/add")
@Transactional(rollbackFor = Exception.class)
public R<?> addSurveillance(@RequestBody TargetedSurveillance sv) {
sv.setStatus(0);
sv.setTotalCases(0);
sv.setInfectionCases(0);
sv.setInfectionRate(BigDecimal.ZERO);
sv.setCreateTime(new Date());
surveillanceService.save(sv);
return R.ok(sv);
}
@PostMapping("/surveillance/update-stats")
@Transactional(rollbackFor = Exception.class)
public R<?> updateSurveillanceStats(@RequestBody Map<String, Object> params) {
Long id = Long.valueOf(params.get("id").toString());
Integer totalCases = Integer.valueOf(params.get("totalCases").toString());
Integer infectionCases = Integer.valueOf(params.get("infectionCases").toString());
TargetedSurveillance sv = surveillanceService.getById(id);
if (sv == null) return R.fail("监测记录不存在");
sv.setTotalCases(totalCases);
sv.setInfectionCases(infectionCases);
if (totalCases > 0) {
sv.setInfectionRate(BigDecimal.valueOf(infectionCases)
.divide(BigDecimal.valueOf(totalCases), 4, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100))
.setScale(2, RoundingMode.HALF_UP));
}
sv.setUpdateTime(new Date());
surveillanceService.updateById(sv);
return R.ok();
}
private final IInfectionEnhancedAppService enhancedAppService;
// ==================== 手卫生监测 ====================
@Operation(summary = "手卫生监测列表")
@PreAuthorize("@ss.hasPermi('infection:infection:list')")
@GetMapping("/hand-hygiene/page")
public R<?> getHandHygienePage(
@RequestParam(value = "departmentName", required = false) String deptName,
@RequestParam(value = "departmentName", required = false) String departmentName,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
LambdaQueryWrapper<HandHygiene> wrapper = new LambdaQueryWrapper<>();
wrapper.like(StringUtils.hasText(deptName), HandHygiene::getDepartmentName, deptName)
.orderByDesc(HandHygiene::getMonitorDate);
return R.ok(handHygieneService.page(new Page<>(pageNo, pageSize), wrapper));
return R.ok(enhancedAppService.getHandHygienePage(departmentName, pageNo, pageSize));
}
@Operation(summary = "记录手卫生监测")
@PreAuthorize("@ss.hasPermi('infection:infection:edit')")
@PostMapping("/hand-hygiene/add")
@Transactional(rollbackFor = Exception.class)
public R<?> addHandHygiene(@RequestBody HandHygiene hh) {
if (hh.getObserveCount() != null && hh.getObserveCount() > 0 && hh.getComplyCount() != null) {
hh.setComplyRate(BigDecimal.valueOf(hh.getComplyCount())
.divide(BigDecimal.valueOf(hh.getObserveCount()), 4, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100))
.setScale(2, RoundingMode.HALF_UP));
}
hh.setCreateTime(new Date());
handHygieneService.save(hh);
return R.ok(hh);
public R<?> addHandHygiene(@RequestBody Map<String, Object> params) {
return R.ok(enhancedAppService.recordHandHygiene(params));
}
@Operation(summary = "手卫生统计")
@PreAuthorize("@ss.hasPermi('infection:infection:list')")
@GetMapping("/hand-hygiene/stats")
public R<?> getHandHygieneStats(@RequestParam(required = false) Long departmentId) {
Map<String, Object> stats = new HashMap<>();
LambdaQueryWrapper<HandHygiene> wrapper = new LambdaQueryWrapper<>();
if (departmentId != null) {
wrapper.eq(HandHygiene::getDepartmentId, departmentId);
}
List<HandHygiene> list = handHygieneService.list(wrapper);
int totalObserve = 0, totalComply = 0;
for (HandHygiene hh : list) {
totalObserve += hh.getObserveCount() != null ? hh.getObserveCount() : 0;
totalComply += hh.getComplyCount() != null ? hh.getComplyCount() : 0;
}
stats.put("totalObserve", totalObserve);
stats.put("totalComply", totalComply);
stats.put("overallRate", totalObserve > 0 ?
BigDecimal.valueOf(totalComply).divide(BigDecimal.valueOf(totalObserve), 4, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO);
stats.put("recordCount", list.size());
return R.ok(stats);
public R<?> getHandHygieneStats(
@RequestParam(value = "departmentId", required = false) Long departmentId) {
return R.ok(enhancedAppService.getHandHygieneStats(departmentId));
}
// ==================== 环境卫生学监测 ====================
@Operation(summary = "环境卫生学监测列表")
@PreAuthorize("@ss.hasPermi('infection:infection:list')")
@GetMapping("/env-monitor/page")
public R<?> getEnvMonitorPage(
@RequestParam(value = "departmentName", required = false) String departmentName,
@RequestParam(value = "monitorType", required = false) String monitorType,
@RequestParam(value = "result", required = false) String result,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
return R.ok(enhancedAppService.getEnvironmentalPage(departmentName, monitorType, result, pageNo, pageSize));
}
@Operation(summary = "记录环境卫生学监测")
@PreAuthorize("@ss.hasPermi('infection:infection:edit')")
@PostMapping("/env-monitor/add")
public R<?> addEnvMonitor(@RequestBody Map<String, Object> params) {
return R.ok(enhancedAppService.recordEnvironmental(params));
}
@Operation(summary = "环境卫生学监测统计")
@PreAuthorize("@ss.hasPermi('infection:infection:list')")
@GetMapping("/env-monitor/stats")
public R<?> getEnvMonitorStats() {
return R.ok(enhancedAppService.getEnvironmentalStats());
}
// ==================== 多重耐药菌 ====================
@Operation(summary = "多重耐药菌列表")
@PreAuthorize("@ss.hasPermi('infection:infection:list')")
@GetMapping("/mdr/page")
public R<?> getMdrPage(
@RequestParam(value = "patientName", required = false) String patientName,
@@ -189,83 +88,13 @@ public class InfectionEnhancedController {
@RequestParam(value = "isolationStatus", required = false) Integer isolationStatus,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
LambdaQueryWrapper<MultiDrugResistant> wrapper = new LambdaQueryWrapper<>();
wrapper.like(StringUtils.hasText(patientName), MultiDrugResistant::getPatientName, patientName)
.like(StringUtils.hasText(bacteriaName), MultiDrugResistant::getBacteriaName, bacteriaName)
.eq(isolationStatus != null, MultiDrugResistant::getIsolationStatus, isolationStatus)
.orderByDesc(MultiDrugResistant::getReportDate);
return R.ok(mdrService.page(new Page<>(pageNo, pageSize), wrapper));
return R.ok(enhancedAppService.getMultiDrugPage(patientName, bacteriaName, isolationStatus, pageNo, pageSize));
}
@Operation(summary = "记录多重耐药菌")
@PreAuthorize("@ss.hasPermi('infection:infection:edit')")
@PostMapping("/mdr/add")
@Transactional(rollbackFor = Exception.class)
public R<?> addMdr(@RequestBody MultiDrugResistant mdr) {
mdr.setIsolationStatus(0);
mdr.setStatus(0);
mdr.setCreateTime(new Date());
mdrService.save(mdr);
return R.ok(mdr);
}
@PostMapping("/mdr/isolate")
@Transactional(rollbackFor = Exception.class)
public R<?> isolateMdr(@RequestBody Map<String, Object> params) {
Long id = Long.valueOf(params.get("id").toString());
MultiDrugResistant mdr = mdrService.getById(id);
if (mdr == null) return R.fail("记录不存在");
mdr.setIsolationStatus(1);
mdr.setIsolationStartDate(new Date());
mdr.setUpdateTime(new Date());
mdrService.updateById(mdr);
return R.ok();
}
@PostMapping("/mdr/release")
@Transactional(rollbackFor = Exception.class)
public R<?> releaseMdr(@RequestParam Long id) {
MultiDrugResistant mdr = mdrService.getById(id);
if (mdr == null) return R.fail("记录不存在");
mdr.setIsolationStatus(2);
mdr.setIsolationEndDate(new Date());
mdr.setUpdateTime(new Date());
mdrService.updateById(mdr);
return R.ok();
}
// ==================== 环境卫生学监测 ====================
@GetMapping("/env-monitor/page")
public R<?> getEnvMonitorPage(
@RequestParam(value = "departmentName", required = false) String deptName,
@RequestParam(value = "monitorType", required = false) String monitorType,
@RequestParam(value = "result", required = false) String result,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
LambdaQueryWrapper<EnvironmentalMonitor> wrapper = new LambdaQueryWrapper<>();
wrapper.like(StringUtils.hasText(deptName), EnvironmentalMonitor::getDepartmentName, deptName)
.eq(StringUtils.hasText(monitorType), EnvironmentalMonitor::getMonitorType, monitorType)
.eq(StringUtils.hasText(result), EnvironmentalMonitor::getResult, result)
.orderByDesc(EnvironmentalMonitor::getMonitorDate);
return R.ok(envMonitorService.page(new Page<>(pageNo, pageSize), wrapper));
}
@PostMapping("/env-monitor/add")
@Transactional(rollbackFor = Exception.class)
public R<?> addEnvMonitor(@RequestBody EnvironmentalMonitor env) {
env.setCreateTime(new Date());
envMonitorService.save(env);
return R.ok(env);
}
@GetMapping("/env-monitor/stats")
public R<?> getEnvMonitorStats() {
Map<String, Object> stats = new HashMap<>();
LambdaQueryWrapper<EnvironmentalMonitor> wrapper = new LambdaQueryWrapper<>();
stats.put("total", envMonitorService.count(wrapper));
wrapper.eq(EnvironmentalMonitor::getResult, "合格");
stats.put("qualified", envMonitorService.count(wrapper));
wrapper.eq(EnvironmentalMonitor::getResult, "不合格");
stats.put("unqualified", envMonitorService.count(wrapper));
return R.ok(stats);
public R<?> addMdr(@RequestBody Map<String, Object> params) {
return R.ok(enhancedAppService.recordMultiDrug(params));
}
}