package com.ruoyi.collaborativeApproval.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.approve.bean.vo.ApproveProcessVO; import com.ruoyi.approve.service.IApproveProcessService; import com.ruoyi.collaborativeApproval.dto.SealApplicationManagementDTO; import com.ruoyi.collaborativeApproval.pojo.SealApplicationManagement; import com.ruoyi.collaborativeApproval.service.SealApplicationManagementService; import com.ruoyi.common.enums.FileNameType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.sales.mapper.CommonFileMapper; import com.ruoyi.sales.pojo.CommonFile; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.Date; import java.util.List; @AllArgsConstructor @RestController @RequestMapping("/sealApplicationManagement") @Api(tags = "用印申请管理") public class SealApplicationManagementController { @Autowired private SealApplicationManagementService sealApplicationManagementService; @Autowired private IApproveProcessService approveProcessService; @Autowired private CommonFileMapper commonFileMapper; @GetMapping("/getList") @ApiOperation("分页查询") public AjaxResult listPage(Page page, SealApplicationManagement sealApplicationManagement){ IPage result = sealApplicationManagementService.listPage(page,sealApplicationManagement); for (SealApplicationManagementDTO record : result.getRecords()) { if (record.getApproveProcessId() != null) { record.setCommonFileList(commonFileMapper.selectList(new LambdaQueryWrapper() .eq(CommonFile::getCommonId, record.getApproveProcessId()) .eq(CommonFile::getType, FileNameType.ApproveProcess.getValue()))); } } return AjaxResult.success(result); } @PostMapping("/add") @ApiOperation("新增/重新申请用印") @Transactional(rollbackFor = Exception.class) public AjaxResult add(@RequestBody SealApplicationManagement sealApplicationManagement) throws Exception { sealApplicationManagement.setStatus("pending"); if (sealApplicationManagement.getId() == null) { sealApplicationManagementService.save(sealApplicationManagement); } else { // 重新申请:清理旧审批流程关联的附件,避免遗留 SealApplicationManagement old = sealApplicationManagementService.getById(sealApplicationManagement.getId()); if (old != null && old.getApproveProcessId() != null) { commonFileMapper.delete(new LambdaQueryWrapper() .eq(CommonFile::getCommonId, old.getApproveProcessId()) .eq(CommonFile::getType, FileNameType.ApproveProcess.getValue())); } sealApplicationManagementService.updateById(sealApplicationManagement); } // 发起协同统一审核流程(用印审批) ApproveProcessVO vo = new ApproveProcessVO(); vo.setApproveType(9); vo.setApproveReason(sealApplicationManagement.getApplicationNum() + ":" + sealApplicationManagement.getTitle()); vo.setApproveDeptId(sealApplicationManagement.getDeptId()); vo.setApproveTime(new SimpleDateFormat("yyyy-MM-dd").format(new Date())); Long approveProcessId = approveProcessService.addApprove(vo); // 回填审批流程id,供审批回调更新状态、详情查询附件 sealApplicationManagement.setApproveProcessId(approveProcessId); sealApplicationManagementService.updateById(sealApplicationManagement); // 保存用印申请附件,关联到审批流程 if (!CollectionUtils.isEmpty(sealApplicationManagement.getAttachmentList())) { for (CommonFile cf : sealApplicationManagement.getAttachmentList()) { CommonFile record = new CommonFile(); record.setCommonId(approveProcessId); record.setName(cf.getName()); record.setUrl(cf.getUrl()); record.setType(FileNameType.ApproveProcess.getValue()); record.setCreateTime(LocalDateTime.now()); record.setUpdateTime(LocalDateTime.now()); commonFileMapper.insert(record); } } return AjaxResult.success(); } @PostMapping("/update") @ApiOperation("修改") public AjaxResult update(@RequestBody SealApplicationManagement sealApplicationManagement){ return AjaxResult.success(sealApplicationManagementService.updateById(sealApplicationManagement)); } @DeleteMapping("/delete") @ApiOperation("删除") public AjaxResult delete(@PathVariable("ids") List ids){ if (CollectionUtils.isEmpty(ids)) { throw new RuntimeException("请传入要删除的ID"); } return AjaxResult.success(sealApplicationManagementService.removeBatchByIds(ids)); } @GetMapping("/detail") @ApiOperation("用印申请详情(按审批流程id)") public AjaxResult detail(Long approveProcessId){ SealApplicationManagement seal = sealApplicationManagementService.getOne(new LambdaQueryWrapper() .eq(SealApplicationManagement::getApproveProcessId, approveProcessId) .last("limit 1")); if (seal == null) { throw new RuntimeException("用印申请不存在"); } seal.setCommonFileList(commonFileMapper.selectList(new LambdaQueryWrapper() .eq(CommonFile::getCommonId, approveProcessId) .eq(CommonFile::getType, FileNameType.ApproveProcess.getValue()))); return AjaxResult.success(seal); } @ApiOperation(value = "用印申请管理导出") @PostMapping("/export") public void export(HttpServletResponse response) { List accountExpenses = sealApplicationManagementService.list(); ExcelUtil util = new ExcelUtil(SealApplicationManagement.class); util.exportExcel(response, accountExpenses, "用印申请管理导出"); } }