package cn.besteam.modules.medical.controller; import cn.besteam.common.api.vo.Result; import cn.besteam.common.constant.DepartmentEnum; import cn.besteam.common.constant.ErrorCode; import cn.besteam.common.exception.BusinessException; import cn.besteam.common.util.DateUtil; import cn.besteam.modules.medical.dto.MwWarningRecordDTO; import cn.besteam.modules.medical.entity.MwWarningRecord; import cn.besteam.modules.medical.service.IMwWarningRecordService; import cn.besteam.modules.shiro.authc.util.EnvUtils; import cn.besteam.modules.system.entity.SysDepartment; import cn.besteam.modules.system.entity.SysUserRole; import cn.besteam.modules.system.service.ISysDepartmentService; import cn.besteam.modules.system.service.ISysUserRoleService; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; 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.ApiOperation; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @Title: Controller * @Description: 预警信息 * @author: besteam * @date: 2020-07-17 * @version: V1.0 */ @RestController @RequestMapping("/medical/mwWarningRecord") @Slf4j @Api(description = "预警信息") public class MwWarningRecordController { @Autowired private IMwWarningRecordService mwWarningRecordService; @Autowired private ISysDepartmentService sysDepartmentService; @Autowired private ISysUserRoleService sysUserRoleService; /** * 分页列表查询 * * @param dto * @param pageNo * @param pageSize * @return */ @GetMapping(value = "/list") @ApiOperation(value = "获取预警信息数据列表", notes = "获取所有预警信息数据列表", produces = "application/json") public Result> queryPageList(MwWarningRecordDTO dto, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { Page page = new Page<>(pageNo, pageSize); List hospitalList = null; if (dto.getHospitalId() != null) { SysDepartment myDepartment = sysDepartmentService.getById(dto.getHospitalId()); if (myDepartment == null) { throw new BusinessException(ErrorCode.ERR_500, "医院不存在"); } hospitalList = sysDepartmentService.list(new QueryWrapper().lambda().likeRight(SysDepartment::getTreeCode, myDepartment.getTreeCode()).eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())); } else { SysDepartment myDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId()); if (myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) { myDepartment = sysDepartmentService.getHospital(myDepartment.getParentId()); } hospitalList = sysDepartmentService.list(new QueryWrapper().lambda().likeRight(SysDepartment::getTreeCode, myDepartment.getTreeCode()).eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())); } if (CollectionUtils.isEmpty(hospitalList)) { return Result.ok(page); } List sysDepartments=null; if(dto.getOfficeId()!=null){ sysDepartments=sysDepartmentService.list(new QueryWrapper().eq("parent_id",dto.getOfficeId())); } QueryWrapper queryWrapper = new QueryWrapper<>(); if(sysDepartments!=null && sysDepartments.size()>0){ queryWrapper.lambda().in(MwWarningRecord::getOfficeId, sysDepartments.stream().map(SysDepartment::getId).collect(Collectors.toList())); }else { queryWrapper.lambda().eq(dto.getOfficeId() != null, MwWarningRecord::getOfficeId, dto.getOfficeId()); } //todo 判断是否是预警角色账号,如果是预警账号需要过滤数据等级 Integer userId=EnvUtils.getUser().getId(); List sysUserRoles=sysUserRoleService.getSysRoleListByUserId(userId); //一级预警人员=23,二级预警人员=24,三级预警人员=25 Integer level = 0;//用户预警角色等级 for(SysUserRole sysUserRole:sysUserRoles){ if(sysUserRole.getRoleId()==25){ level=3; }else if(sysUserRole.getRoleId()==24){ level=2; }else if(sysUserRole.getRoleId()==23) { level = 1; } } queryWrapper.lambda()// .in(MwWarningRecord::getHospitalId, hospitalList.stream().map(SysDepartment::getId).collect(Collectors.toList()))// .eq(dto.getType() != null && dto.getType() > 0, MwWarningRecord::getType, dto.getType())// // .eq(dto.getHospitalId() != null, MwWarningRecord::getHospitalId, dto.getHospitalId())// .ge(dto.getStartTime() != null, MwWarningRecord::getWarningTime, DateUtil.format(dto.getStartTime()))// .le(dto.getEndTime() != null, MwWarningRecord::getWarningTime, DateUtil.format(dto.getEndTime()))// .like(StringUtils.isNotEmpty(dto.getKeyword()), MwWarningRecord::getWarningTargetName, dto.getKeyword())// .eq(dto.getStatus() != null, MwWarningRecord::getStatus, dto.getStatus())// .eq(dto.getSuperviseCount() != null, MwWarningRecord::getSuperviseCount, dto.getSuperviseCount())// .eq(dto.getMessageCount() != null, MwWarningRecord::getMessageCount, dto.getMessageCount())// .eq(dto.getLevel() != null, MwWarningRecord::getLevel, dto.getLevel())// .ge( MwWarningRecord::getLevel, level)// .orderByDesc(MwWarningRecord::getWarningTime) .orderByDesc(MwWarningRecord::getId) ; IPage pageList = mwWarningRecordService.page(page, queryWrapper); return Result.ok(pageList); } private static Map headerMap = new LinkedHashMap<>(); static { headerMap.put("warningTime", "预警时间"); headerMap.put("typeName", "预警类型"); headerMap.put("hospitalName", "医院名称"); headerMap.put("officeName", "科室名称"); headerMap.put("wasteTypeName", "废物类型"); headerMap.put("weight", "重量(kg)"); headerMap.put("warningTargetName", "预警对象"); headerMap.put("message", "预警信息"); headerMap.put("statusName", "状态"); headerMap.put("level", "预警等级"); headerMap.put("superviseCount", "反馈次数"); headerMap.put("messageCount", "提醒次数"); } @Data private static class MwWarningRecordExportVO { private String warningTime; private String typeName; private String hospitalName; private String officeName; private String wasteTypeName; private String weight; private String warningTargetName; private String message; private String statusName; private String level; private Integer superviseCount; private Integer messageCount; } @GetMapping("/export") @ApiOperation(value = "导出", notes = "导出", produces = "application/json") public void export(HttpServletResponse response, MwWarningRecordDTO dto) throws IOException { List voList = new ArrayList<>(); List hospitalList = null; if (dto.getHospitalId() != null) { SysDepartment myDepartment = sysDepartmentService.getById(dto.getHospitalId()); if (myDepartment == null) { throw new BusinessException(ErrorCode.ERR_500, "医院不存在"); } hospitalList = sysDepartmentService.list(new QueryWrapper().lambda().likeRight(SysDepartment::getTreeCode, myDepartment.getTreeCode()).eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())); } else { SysDepartment myDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId()); if (myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) { myDepartment = sysDepartmentService.getHospital(myDepartment.getParentId()); } hospitalList = sysDepartmentService.list(new QueryWrapper().lambda().likeRight(SysDepartment::getTreeCode, myDepartment.getTreeCode()).eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())); } if (!CollectionUtils.isEmpty(hospitalList)) { List sysDepartments=null; if(dto.getOfficeId()!=null){ sysDepartments=sysDepartmentService.list(new QueryWrapper().eq("parent_id",dto.getOfficeId())); } QueryWrapper queryWrapper = new QueryWrapper<>(); if(sysDepartments!=null && sysDepartments.size()>0){ queryWrapper.lambda().in(MwWarningRecord::getOfficeId, sysDepartments.stream().map(SysDepartment::getId).collect(Collectors.toList())); }else { queryWrapper.lambda().eq(dto.getOfficeId() != null, MwWarningRecord::getOfficeId, dto.getOfficeId()); } //todo 判断是否是预警角色账号,如果是预警账号需要过滤数据等级 Integer userId=EnvUtils.getUser().getId(); List sysUserRoles=sysUserRoleService.getSysRoleListByUserId(userId); //一级预警人员=23,二级预警人员=24,三级预警人员=25 Integer level = 0;//用户预警角色等级 for(SysUserRole sysUserRole:sysUserRoles){ if(sysUserRole.getRoleId()==25){ level=3; }else if(sysUserRole.getRoleId()==24){ level=2; }else if(sysUserRole.getRoleId()==23) { level = 1; } } queryWrapper.lambda()// .in(MwWarningRecord::getHospitalId, hospitalList.stream().map(SysDepartment::getId).collect(Collectors.toList()))// .eq(dto.getType() != null && dto.getType() > 0, MwWarningRecord::getType, dto.getType())// //.eq(dto.getOfficeId() != null, MwWarningRecord::getOfficeId, dto.getOfficeId())// .ge(dto.getStartTime() != null, MwWarningRecord::getWarningTime, DateUtil.format(dto.getStartTime()))// .le(dto.getEndTime() != null, MwWarningRecord::getWarningTime, DateUtil.format(dto.getEndTime()))// .like(StringUtils.isNotEmpty(dto.getKeyword()), MwWarningRecord::getWarningTargetName, dto.getKeyword())// .eq(dto.getStatus() != null, MwWarningRecord::getStatus, dto.getStatus())// .eq(dto.getSuperviseCount() != null, MwWarningRecord::getSuperviseCount, dto.getSuperviseCount())// .eq(dto.getMessageCount() != null, MwWarningRecord::getMessageCount, dto.getMessageCount())// .eq(dto.getLevel() != null, MwWarningRecord::getLevel, dto.getLevel())// .ge( MwWarningRecord::getLevel, level)// .orderByDesc(MwWarningRecord::getWarningTime); List list = mwWarningRecordService.list(queryWrapper); for (MwWarningRecord warningRecord : list) { MwWarningRecordExportVO vo = new MwWarningRecordExportVO(); BeanUtils.copyProperties(warningRecord, vo); if (warningRecord.getStatus().equals(1)) { vo.setStatusName("未解除"); } else if (warningRecord.getStatus().equals(2)) { vo.setStatusName("未解除"); } else if (warningRecord.getStatus().equals(3)) { vo.setStatusName("已解除"); } else if (warningRecord.getStatus().equals(4)) { vo.setStatusName("已解除"); } if(warningRecord.getLevel().equals(1)){ vo.setLevel("一级预警"); }else if(warningRecord.getLevel().equals(2)){ vo.setLevel("二级预警"); }else if(warningRecord.getLevel().equals(3)){ vo.setLevel("三级预警"); } vo.setWarningTime(DateUtil.formatTime(warningRecord.getWarningTime(), "yyyy-MM-dd HH:mm:ss")); if (warningRecord.getWeight() != null) { vo.setWeight(warningRecord.getWeight().toPlainString()); } vo.setSuperviseCount(warningRecord.getSuperviseCount()); vo.setMessageCount(warningRecord.getMessageCount()); voList.add(vo); } } ExcelWriter writer = ExcelUtil.getWriter(true); writer.renameSheet("预警信息"); writer.setColumnWidth(0, 30); writer.setColumnWidth(1, 30); writer.setColumnWidth(2, 30); writer.setColumnWidth(3, 30); writer.setColumnWidth(4, 30); writer.setColumnWidth(5, 30); writer.setColumnWidth(6, 30); writer.setColumnWidth(7, 30); writer.setColumnWidth(8, 30); writer.setColumnWidth(9, 30); writer.setColumnWidth(10, 30); writer.setColumnWidth(11, 30); writer.setHeaderAlias(headerMap); writer.write(voList); // String fileName = "预警信息"; response.setContentType("application/octet-stream;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xlsx"); writer.flush(response.getOutputStream()); writer.close(); } }