| | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.core.domain.entity.User; |
| | | import com.ruoyi.common.numgen.NumberGenerator; |
| | | import com.ruoyi.common.utils.QueryWrappers; |
| | | import com.ruoyi.framework.exception.ErrorException; |
| | | import com.ruoyi.manage.excel.ManageDocumentControlledImportDto; |
| | | import com.ruoyi.manage.mapper.ManageDocumentControlledMapper; |
| | | import com.ruoyi.manage.mapper.ManageDocumentListMapper; |
| | | import com.ruoyi.manage.mapper.ManageRecordCheckMapper; |
| | |
| | | import com.ruoyi.manage.pojo.ManageDocumentList; |
| | | import com.ruoyi.manage.pojo.ManageRecordCheck; |
| | | import com.ruoyi.manage.service.ManageDocumentControlledService; |
| | | import com.ruoyi.manage.util.DocumentPreviewUtils; |
| | | import com.ruoyi.system.mapper.UserMapper; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | import java.io.FileInputStream; |
| | | import java.io.OutputStream; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | |
| | | @Resource |
| | | private UserMapper userMapper; |
| | | |
| | | @Resource |
| | | private NumberGenerator<ManageDocumentControlled> numberGenerator; |
| | | |
| | | private static final DateTimeFormatter CODE_DATE_FORMAT = DateTimeFormatter.ofPattern("yyMMdd"); |
| | | |
| | | @Override |
| | | public IPage<ManageDocumentControlled> pageManageDocumentControlled(Page page, ManageDocumentControlled manageDocumentControlled) { |
| | | return manageDocumentControlledMapper.pageManageDocumentControlled(page, QueryWrappers.queryWrappers(manageDocumentControlled)); |
| | |
| | | @Override |
| | | public int addManageDocumentControlled(ManageDocumentControlled manageDocumentControlled) { |
| | | manageDocumentControlled.setState("待审核"); |
| | | // 提交日期不再在界面填写,入库时自动写当天,保留原有字段含义 |
| | | if (manageDocumentControlled.getSubmitDate() == null) { |
| | | manageDocumentControlled.setSubmitDate(LocalDate.now()); |
| | | } |
| | | String urlString; |
| | | String pathName; |
| | | String path; |
| | |
| | | @Override |
| | | public int checkManageDocumentControlled(ManageDocumentControlled manageDocumentControlled) { |
| | | ManageDocumentControlled documentControlled = manageDocumentControlledMapper.selectById(manageDocumentControlled.getId()); |
| | | if (documentControlled == null) { |
| | | throw new ErrorException("申请记录不存在"); |
| | | } |
| | | // 已通过的申请不能再审核,否则会重复生成文件清单和审批记录 |
| | | if ("通过".equals(documentControlled.getState())) { |
| | | throw new ErrorException("该申请已审核通过,不能重复审核"); |
| | | } |
| | | if (manageDocumentControlled.getState().equals("通过")) { |
| | | // 删除旧文件 |
| | | File oldFile = new File(wordUrl + "/" + documentControlled.getUrl()); |
| | |
| | | manageDocumentList.setName(documentControlled.getName()); |
| | | manageDocumentList.setVersion(documentControlled.getVersion()); |
| | | manageDocumentList.setWriter(documentControlled.getWriter()); |
| | | manageDocumentList.setEffectiveDate(LocalDate.now()); |
| | | // 文件清单的生效日期取申请的“实施日期”,没填才用当天 |
| | | manageDocumentList.setEffectiveDate(documentControlled.getImplementDate() != null |
| | | ? documentControlled.getImplementDate() : LocalDate.now()); |
| | | manageDocumentList.setState("有效"); |
| | | manageDocumentList.setUrl(manageDocumentControlled.getUrl()); |
| | | manageDocumentListMapper.insert(manageDocumentList); |
| | |
| | | manageRecordCheck.setDocumentCode(documentControlled.getDocumentCode()); |
| | | manageRecordCheck.setDocumentName(documentControlled.getName()); |
| | | manageRecordCheck.setDocumentVersion(documentControlled.getVersion()); |
| | | manageRecordCheck.setWriteUser(userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getName,documentControlled.getWriter())).getId()); |
| | | // 作者可能不是系统用户(历史数据/手填),查不到时不再空指针 |
| | | User writerUser = null; |
| | | if (documentControlled.getWriter() != null && !documentControlled.getWriter().trim().isEmpty()) { |
| | | writerUser = userMapper.selectOne(Wrappers.<User>lambdaQuery() |
| | | .eq(User::getName, documentControlled.getWriter()) |
| | | .last("limit 1")); |
| | | } |
| | | manageRecordCheck.setWriteUser(writerUser == null ? null : writerUser.getId()); |
| | | manageRecordCheck.setCheckUser(documentControlled.getDutyUser()); |
| | | manageRecordCheck.setCheckState(manageDocumentControlled.getState()); |
| | | manageRecordCheck.setRemark(documentControlled.getInstructions()); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public int importManageDocumentControlled(List<ManageDocumentControlledImportDto> rows) { |
| | | LocalDate today = LocalDate.now(); |
| | | LocalDateTime now = LocalDateTime.now(); |
| | | String codePrefix = "WT" + CODE_DATE_FORMAT.format(today); |
| | | int count = 0; |
| | | for (ManageDocumentControlledImportDto dto : rows) { |
| | | Map<String, Object> row = new HashMap<>(); |
| | | row.put("documentCode", numberGenerator.generateNumberWithPrefix( |
| | | 3, codePrefix, ManageDocumentControlled::getDocumentCode)); |
| | | row.put("type", null); |
| | | row.put("name", dto.getName().trim()); |
| | | row.put("version", trimToNull(dto.getVersion())); |
| | | row.put("writer", null); |
| | | row.put("submitDate", today); |
| | | row.put("publishDate", dto.getPublishDateValue()); |
| | | row.put("implementDate", dto.getImplementDateValue()); |
| | | row.put("instructions", null); |
| | | row.put("state", "草稿"); |
| | | row.put("url", null); |
| | | row.put("dutyUser", null); |
| | | row.put("createTime", now); |
| | | row.put("updateTime", now); |
| | | count += manageDocumentControlledMapper.insertImportedDraft(row); |
| | | } |
| | | return count; |
| | | } |
| | | |
| | | private String trimToNull(String value) { |
| | | return value == null || value.trim().isEmpty() ? null : value.trim(); |
| | | } |
| | | |
| | | @Override |
| | | public void checkManageDocumentControlledPdf(Long id, HttpServletResponse response) throws Exception { |
| | | ManageDocumentControlled manageDocumentControlled = manageDocumentControlledMapper.selectById(id); |
| | | File file = new File(wordUrl + "/" + manageDocumentControlled.getUrl()); |
| | | FileInputStream fileInputStream = new FileInputStream(file); |
| | | response.setContentType("application/pdf"); |
| | | response.setCharacterEncoding("UTF-8"); |
| | | response.setHeader("Content-disposition", "inline;filename=" + file.getName()); |
| | | response.setContentLength((int)file.length()); |
| | | OutputStream os = response.getOutputStream(); |
| | | // 将文件内容写入输出流 |
| | | byte[] buffer = new byte[4096]; |
| | | int bytesRead; |
| | | while ((bytesRead = fileInputStream.read(buffer)) != -1) { |
| | | os.write(buffer, 0, bytesRead); |
| | | if (manageDocumentControlled == null || ObjectUtils.isEmpty(manageDocumentControlled.getUrl())) { |
| | | throw new ErrorException("文件未上传"); |
| | | } |
| | | os.flush(); |
| | | os.close(); |
| | | // PDF 直接输出,Word/图片在线转 PDF,供前端预览盖章 |
| | | DocumentPreviewUtils.writeAsPdf(new File(wordUrl + "/" + manageDocumentControlled.getUrl()), response); |
| | | } |
| | | |
| | | } |