package cn.besteam.modules.medical.controller;
import cn.besteam.common.api.vo.Result;
import cn.besteam.common.aspect.annotation.AutoLog;
import cn.besteam.common.dto.IdDTO;
import cn.besteam.common.util.oConvertUtils;
import cn.besteam.modules.medical.entity.MwDevice;
import cn.besteam.modules.medical.entity.MwDisinfectAddress;
import cn.besteam.modules.medical.service.IMwDisinfectAddressService;
import cn.besteam.modules.system.entity.SysDepartment;
import cn.besteam.modules.system.service.ISysDepartmentService;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.util.stream.Collectors;
/**
*
* 消毒地点 前端控制器
*
*
* @author mitao
* @since 2025-12-18
*/
@RestController
@RequestMapping("/medical/mwDisinfectAddress")
@Slf4j
@Api(tags = "消毒地点管理")
public class MwDisinfectAddressController {
@Autowired
private IMwDisinfectAddressService mwDisinfectAddressService;
@Autowired
private ISysDepartmentService sysDepartmentService;
/**
* 分页列表查询
*
* @param pageNo 页码
* @param pageSize 每页数量
* @param name 请求对象
* @return 分页结果
*/
@GetMapping(value = "/list")
@ApiOperation(value = "获取消毒地点列表", notes = "获取消毒地点分页列表", produces = "application/json")
@ApiImplicitParams({@ApiImplicitParam(name = "name", value = "地点名称", dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "hospitalId", value = "医院ID", dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "pageNo", value = "页码", dataType = "int", paramType = "query", defaultValue = "1"),
@ApiImplicitParam(name = "pageSize", value = "每页数量", dataType = "int", paramType = "query", defaultValue = "10")})
public Result> queryPageList(
Integer hospitalId,
String name,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
List hospitalIdList = sysDepartmentService.getSearchHospitalIdList(hospitalId);
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
// 名称模糊查询
queryWrapper.like(StringUtils.isNotBlank(name),MwDisinfectAddress::getName, name)
.eq(MwDisinfectAddress::getDelFlag, 0)
.in(CollUtil.isNotEmpty(hospitalIdList), MwDisinfectAddress::getHospitalId, hospitalIdList)
.orderByDesc(MwDisinfectAddress::getCreateTime);
Page page = new Page<>(pageNo, pageSize);
IPage pageList = mwDisinfectAddressService.page(page, queryWrapper);
Set hospitalIds = pageList.getRecords().stream().map(MwDisinfectAddress::getHospitalId).collect(Collectors.toSet());
Map hospitalNameMap = CollUtil.isNotEmpty(hospitalIds) ? sysDepartmentService.listByIds(hospitalIds)
.stream().collect(Collectors.toMap(SysDepartment::getId, SysDepartment::getDepartName)) : Collections.emptyMap();
pageList.getRecords().forEach(item->{
item.setHospitalName(hospitalNameMap.get(item.getHospitalId()));
});
return Result.ok(pageList);
}
/**
* 添加消毒地点
*
* @param mwDisinfectAddress 消毒地点信息
* @return 操作结果
*/
@PostMapping(value = "/add")
@AutoLog(value = "添加消毒地点")
@ApiOperation(value = "添加消毒地点", notes = "添加消毒地点", produces = "application/json")
public Result add(@RequestBody MwDisinfectAddress mwDisinfectAddress) {
// 校验名称唯一性
if (checkNameExists(mwDisinfectAddress.getName(), null, mwDisinfectAddress.getHospitalId())) {
return Result.error("地点名称已存在!");
}
boolean success = mwDisinfectAddressService.save(mwDisinfectAddress);
if (success) {
return Result.ok("添加成功!");
} else {
return Result.error("添加失败!");
}
}
/**
* 编辑消毒地点
*
* @param mwDisinfectAddress 消毒地点信息
* @return 操作结果
*/
@PostMapping(value = "/edit")
@AutoLog(value = "编辑消毒地点")
@ApiOperation(value = "编辑消毒地点", notes = "编辑消毒地点", produces = "application/json")
public Result edit(@RequestBody MwDisinfectAddress mwDisinfectAddress) {
if (mwDisinfectAddress.getId() == null) {
return Result.error("ID不能为空!");
}
// 校验实体是否存在
MwDisinfectAddress entity = mwDisinfectAddressService.getById(mwDisinfectAddress.getId());
if (entity == null) {
return Result.error("未找到对应实体");
}
// 校验名称唯一性(排除自身)
if (checkNameExists(mwDisinfectAddress.getName(), mwDisinfectAddress.getId(), mwDisinfectAddress.getHospitalId())) {
return Result.error("地点名称已存在!");
}
boolean success = mwDisinfectAddressService.updateById(mwDisinfectAddress);
if (success) {
return Result.ok("修改成功!");
} else {
return Result.error("修改失败!");
}
}
/**
* 通过id删除
*
* @param dto ID参数
* @return 操作结果
*/
@PostMapping(value = "/delete")
@AutoLog(value = "删除消毒地点")
@ApiOperation(value = "删除消毒地点", notes = "删除消毒地点", produces = "application/json")
public Result delete(@Validated @RequestBody IdDTO dto) {
MwDisinfectAddress entity = mwDisinfectAddressService.getById(dto.getId());
if (entity == null) {
return Result.error("未找到对应实体");
}
boolean success = mwDisinfectAddressService.removeById(dto.getId());
if (success) {
return Result.ok("删除成功!");
} else {
return Result.error("删除失败!");
}
}
/**
* 批量删除
*
* @param ids ID数组,逗号分隔
* @return 操作结果
*/
@PostMapping(value = "/deleteBatch")
@AutoLog(value = "批量删除消毒地点")
@ApiOperation(value = "批量删除消毒地点", notes = "批量删除消毒地点", produces = "application/json")
public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
if (oConvertUtils.isEmpty(ids)) {
return Result.error("参数不识别!");
}
mwDisinfectAddressService.removeByIds(Arrays.asList(ids.split(",")));
return Result.ok("批量删除成功!");
}
/**
* 通过id查询
*
* @param id 消毒地点ID
* @return 消毒地点详情
*/
@GetMapping(value = "/queryById")
@ApiOperation(value = "通过ID查询消毒地点", notes = "通过ID查询消毒地点", produces = "application/json")
public Result queryById(@RequestParam(name = "id", required = true) Integer id) {
MwDisinfectAddress entity = mwDisinfectAddressService.getById(id);
if (entity == null) {
return Result.error("未找到对应实体");
}
return Result.ok(entity);
}
/**
* 检查名称是否已存在
*
* @param name 地点名称
* @param excludeId 排除的ID(编辑时使用)
* @param hospitalId 医院ID
* @return true-存在,false-不存在
*/
private boolean checkNameExists(String name, Integer excludeId, Integer hospitalId) {
if (oConvertUtils.isEmpty(name)) {
return false;
}
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", name);
queryWrapper.eq("hospital_id", hospitalId);
queryWrapper.eq("del_flag", 0);
if (excludeId != null) {
queryWrapper.ne("id", excludeId);
}
int count = mwDisinfectAddressService.count(queryWrapper);
return count > 0;
}
}