package org.dromara.eims.controller; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.util.List; import jakarta.servlet.ServletOutputStream; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; import org.springframework.core.io.ClassPathResource; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; import org.dromara.common.web.core.BaseController; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.core.domain.R; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.eims.domain.vo.EimsMaintPlanVo; import org.dromara.eims.domain.bo.EimsMaintPlanBo; import org.dromara.eims.service.IEimsMaintPlanService; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.springframework.web.multipart.MultipartFile; /** * 保养计划 * * @author zhuguifei * @date 2025-03-04 */ @Validated @RequiredArgsConstructor @RestController @RequestMapping("/eims/maintPlan") public class EimsMaintPlanController extends BaseController { private final IEimsMaintPlanService eimsMaintPlanService; /** * 查询保养计划列表 */ @SaCheckPermission("eims:maintPlan:list") @GetMapping("/list") public TableDataInfo list(EimsMaintPlanBo bo, PageQuery pageQuery) { // return eimsMaintPlanService.queryPageList(bo, pageQuery); return eimsMaintPlanService.queryPageListCustom(bo, pageQuery); } /** * 导出保养计划列表 */ @SaCheckPermission("eims:maintPlan:export") @Log(title = "保养计划", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(EimsMaintPlanBo bo, HttpServletResponse response) { List list = eimsMaintPlanService.queryList(bo); ExcelUtil.exportExcel(list, "保养计划", EimsMaintPlanVo.class, response); } /** * 获取保养计划详细信息 * * @param id 主键 */ @SaCheckPermission("eims:maintPlan:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { return R.ok(eimsMaintPlanService.queryById(id)); } /** * 新增保养计划 */ @SaCheckPermission("eims:maintPlan:add") @Log(title = "保养计划", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() public R add(@Validated(AddGroup.class) @RequestBody EimsMaintPlanBo bo) { return toAjax(eimsMaintPlanService.insertByBo(bo)); } /** * 修改保养计划 */ @SaCheckPermission("eims:maintPlan:edit") @Log(title = "保养计划", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() public R edit(@Validated(EditGroup.class) @RequestBody EimsMaintPlanBo bo) { return toAjax(eimsMaintPlanService.updateByBo(bo)); } /** * 删除保养计划 * * @param ids 主键串 */ @SaCheckPermission("eims:maintPlan:remove") @Log(title = "保养计划", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { return toAjax(eimsMaintPlanService.deleteWithValidByIds(List.of(ids), true)); } /** * 导入数据 * * @param file 导入文件 * @param updateSupport 是否更新已存在数据 */ @Log(title = "保养计划", businessType = BusinessType.IMPORT) @SaCheckPermission("eims:maintPlan:import") @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public R importData(@RequestPart("files") List files, boolean updateSupport) throws Exception { StringBuilder successMsg = new StringBuilder(); for (MultipartFile file : files) { String res = eimsMaintPlanService.importData(file, updateSupport); successMsg.append(res).append("; \r\n"); } return R.ok(successMsg.toString()); } /** * 获取导入模板 */ @PostMapping("/importTemplate") public void importTemplate(HttpServletResponse response) throws IOException { // 设置响应类型 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); // 设置文件名 String fileName = URLEncoder.encode("保养计划导入模板", "UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls"); // 读取模板文件 ClassPathResource templateResource = new ClassPathResource("template/by.xls"); try (InputStream inputStream = templateResource.getInputStream(); ServletOutputStream outputStream = response.getOutputStream()) { // 流拷贝 byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } } catch (IOException e) { throw new RuntimeException("模板文件读取失败", e); } } }