package com.ycl.controller; import com.alibaba.excel.EasyExcel; import com.ycl.common.base.Result; import com.ycl.common.exception.base.BaseException; import com.ycl.common.group.Add; import com.ycl.common.group.Update; import com.ycl.common.utils.ProjectCodeGenerator; import com.ycl.common.utils.bean.BeanUtils; import com.ycl.common.utils.excel.OutputExcelUtils; import com.ycl.domain.entity.ProjectInfo; import com.ycl.domain.excel.ProjectExcelTemplate; import com.ycl.domain.excel.ProjectTempImport; import com.ycl.domain.form.DocumentInfoForm; import com.ycl.domain.form.ProjectForm; import com.ycl.domain.form.ProjectInfoForm; import com.ycl.domain.query.ProjectExportQuery; import com.ycl.domain.query.ProjectInfoQuery; import com.ycl.listener.excel.CurrencyDataListener; import com.ycl.service.ProjectInfoService; import com.ycl.system.mapper.SysDeptMapper; import com.ycl.system.service.ISysDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotEmpty; import java.io.IOException; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.function.Consumer; /** * 项目管理基础信息表 前端控制器 * * @author flq * @since 2024-11-22 */ @Validated @RequiredArgsConstructor @Api(value = "项目管理基础信息表", tags = "项目管理基础信息表管理") @RestController @RequestMapping("/project/info") public class ProjectInfoController { private final ProjectInfoService projectInfoService; private final SysDeptMapper deptMapper; @PostMapping("/import/temp") @ApiOperation(value = "临时导入", notes = "临时导入") // @PreAuthorize("hasAuthority('projectInfo:add')") public Result importTemp(@RequestPart("file") MultipartFile file) throws IOException { Consumer> consumer = (data) -> { for (ProjectTempImport project : data) { ProjectInfo projectInfo = new ProjectInfo(); BeanUtils.copyProperties(project, projectInfo); projectInfo.setYearInvestAmount(project.getTzje()); // 处理业主单位、主管部门id Long yzId = deptMapper.selectByName(project.getProjectOwnerUnit()); if (Objects.nonNull(yzId)) { projectInfo.setProjectOwnerUnit(yzId); } Long zgId = deptMapper.selectByName(project.getCompetentDepartment()); if (Objects.nonNull(zgId)) { projectInfo.setCompetentDepartment(zgId + ""); } projectInfo.setArea(project.getArea()); projectInfo.setYear("2025"); // 设置为审核已通过 projectInfo.setUsedStatus(2); projectInfoService.save(projectInfo); } }; EasyExcel.read(file.getInputStream(), ProjectTempImport.class, new CurrencyDataListener(consumer)).headRowNumber(1).doReadAll(); return Result.ok(); } @PostMapping @ApiOperation(value = "添加", notes = "添加") // @PreAuthorize("hasAuthority('projectInfo:add')") public Result add(@RequestBody @Validated(Add.class) ProjectInfoForm form) { return projectInfoService.add(form); } @PostMapping("/document") @ApiOperation(value = "添加相关文件", notes = "添加相关文件") // @PreAuthorize("hasAuthority('projectInfo:add')") public Result addDoc(@RequestBody @Validated(Add.class) DocumentInfoForm form) { return projectInfoService.addDoc(form); } @PutMapping @ApiOperation(value = "修改", notes = "修改") // @PreAuthorize("hasAuthority('projectInfo:edit')") public Result update(@RequestBody @Validated(Update.class) ProjectInfoForm form) { return projectInfoService.update(form); } @DeleteMapping("/{id}") @ApiOperation(value = "ID删除", notes = "ID删除") // @PreAuthorize("hasAuthority('projectInfo:del')") public Result removeById(@PathVariable("id") Long id) { return projectInfoService.removeById(id); } @DeleteMapping("/batch") @ApiOperation(value = "批量删除", notes = "批量删除") // @PreAuthorize("hasAuthority('projectInfo:del:batch')") public Result remove(@RequestBody @NotEmpty(message = "请选择数据") List ids) { return projectInfoService.remove(ids); } @GetMapping("/page") @ApiOperation(value = "分页", notes = "分页") // @PreAuthorize("hasAuthority('projectInfo:page')") public Result page(ProjectInfoQuery query) { return projectInfoService.page(query); } @GetMapping("/{id}") @ApiOperation(value = "详情", notes = "详情") // @PreAuthorize("hasAuthority('projectInfo:detail')") public Result detail(@PathVariable("id") Integer id) { return projectInfoService.detail(id); } @GetMapping("/document/{id}") @ApiOperation(value = "相关文件详情", notes = "相关文件详情") // @PreAuthorize("hasAuthority('projectInfo:detail')") public Result docDetail(@PathVariable("id") Integer id) { return projectInfoService.docDetail(id); } @GetMapping("/list") // @PreAuthorize("hasAuthority('projectInfo:list')") @ApiOperation(value = "列表", notes = "列表") public Result list() { return projectInfoService.all(); } /** * 生成项目编号 * * @return 项目编号 */ @GetMapping("/getProjectCode") public Result generateProjectCode() { return Result.ok().data(ProjectCodeGenerator.generateProjectCode()); } @GetMapping("/searchByKey") public Result searchByKey(@RequestParam(required = false) String wordKey) { return projectInfoService.searchByKey(wordKey); } @GetMapping("/getManagerFlag/{recordId}") public Result getManagerFlag(@PathVariable("recordId") Integer recordId) { return projectInfoService.getManagerFlag(recordId); } /** * 导出模板 * * @param response * @return */ @PostMapping("/export/template") public void exportTemplate(HttpServletResponse response) throws IOException { List fieldList = new ArrayList<>(); OutputExcelUtils.export(response, "导入模板", "项目信息", null, ProjectExcelTemplate.class, fieldList); } /** * 项目导出 * * @param response * @throws IOException */ @PostMapping("/export") public void export(HttpServletResponse response, ProjectExportQuery query) throws IOException { projectInfoService.export(response, query); } @PutMapping("usedStatus/{id}/{usedStatus}") @ApiOperation(value = "修改使用状态", notes = "修改使用状态") // @PreAuthorize("hasAuthority('projectInfo:edit')") public Result updateUsedStatus(@PathVariable Integer id, @PathVariable Integer usedStatus) { return projectInfoService.updateUsedStatus(id, usedStatus); } /** * 项目导入 * @param file * @return */ @PostMapping("/import") public Result importProject(MultipartFile file) { if (file.getSize() > 100 * 1024 * 1024) { throw new BaseException("文件过大,文件不得超过100MB"); } projectInfoService.importProject(file); return Result.ok(); } @PostMapping("/editProject") public Result editProject(@RequestBody ProjectForm form) { return projectInfoService.editProject(form); } }