package org.springblade.mdm.statreport.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.DateUtil; import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; import org.springblade.core.mp.support.Condition; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.UrlUtil; import org.springblade.mdm.flow.entity.TaskDispatch; import org.springblade.mdm.flow.excution.StartDispatcher; import org.springblade.mdm.flow.service.FlowCommonService; import org.springblade.mdm.flow.service.FlowProgramFileService; import org.springblade.mdm.flow.service.FlowProgramProperties; import org.springblade.mdm.flow.service.TaskDispatchService; import org.springblade.mdm.flow.service.execute.DefaultFlowCompleteService; import org.springblade.mdm.flow.service.execute.TryFlowCompleteService; import org.springblade.mdm.flow.vo.DispathTaskQueryVO; import org.springblade.mdm.flow.vo.TaskAssignVO; import org.springblade.mdm.statreport.service.ApproveTableService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; @Slf4j @RestController @AllArgsConstructor @RequestMapping("/statreport/tableprint") @Tag(name = "表格打印", description = "表格打印") public class ApproveTablePrintController { @Autowired private FlowCommonService flowCommonService; @Autowired private ApproveTableService approveTableService; private final TaskDispatchService taskDispatchService; @Operation(summary = "任务审批表", description = "任务审批表") @GetMapping("/dispatch-page") public R> dispatchPatch(DispathTaskQueryVO queryVO) { LocalDateTime end = null; if(queryVO.getCreateTimeEnd()!=null){ end = DateUtil.toLocalDateTime(queryVO.getCreateTimeEnd()).plusDays(1); } return R.data(taskDispatchService.lambdaQuery() .like(StringUtils.isNotBlank(queryVO.getDrawingNo()), TaskDispatch::getDrawingNo,queryVO.getDrawingNo()) .eq(TaskDispatch::getStatus,TaskDispatch.STATUS_STARTED) .ge(queryVO.getCreateTimeBegin()!=null, TaskDispatch::getCreateTime,queryVO.getCreateTimeBegin()) .le(queryVO.getCreateTimeEnd()!=null, TaskDispatch::getCreateTime,end).orderByDesc(TaskDispatch::getCreateTime) .page(Condition.getPage(queryVO))); } @PostMapping("/export-approve-table") @Operation(summary = "导出审批表", description = "导出审批表pdf") public void exportApproveTable(String id,HttpServletResponse response) throws IOException { TaskDispatch dispatch = taskDispatchService.getById(id); FlowProgramProperties props = flowCommonService.getProgramPropertiesFromHis(dispatch.getProcessInstanceId()); String progName = props.getDrawingNo()+"-"+props.getProcessNo()+"-"+props.getProcessEdition(); String filename = UrlUtil.encode("数控程序编制审批单"+progName)+".docx"; ByteArrayOutputStream outputStream = approveTableService.exportApproveTableDoc(dispatch,props); byte[] fileBytes = outputStream.toByteArray(); response.setHeader("Content-Disposition", "attachment; filename="+filename); response.setContentType("application/octet-stream"); response.getOutputStream().write(fileBytes); } }