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; } }