出差新增检索

This commit is contained in:
2026-04-22 13:10:54 +08:00
parent f831f29b63
commit 2d86713971
6 changed files with 76 additions and 6 deletions

View File

@@ -40,6 +40,11 @@ public class HrmSealReqController extends BaseController {
return R.ok(service.queryById(bizId)); return R.ok(service.queryById(bizId));
} }
@GetMapping("/{bizId}/pdfPages")
public R<Integer> pdfPages(@PathVariable @NotNull Long bizId) {
return R.ok(service.queryPdfPageTotal(bizId));
}
@Log(title = "用印申请", businessType = BusinessType.INSERT) @Log(title = "用印申请", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
public R<HrmSealReqVo> add(@Validated @RequestBody HrmSealReqBo bo) { public R<HrmSealReqVo> add(@Validated @RequestBody HrmSealReqBo bo) {

View File

@@ -7,7 +7,6 @@ import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.io.Serializable;
/** /**
* 用印申请 * 用印申请
@@ -15,7 +14,7 @@ import java.io.Serializable;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@TableName("hrm_seal_req") @TableName("hrm_seal_req")
public class HrmSealReq extends BaseEntity implements Serializable { public class HrmSealReq extends BaseEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -29,7 +28,7 @@ public class HrmSealReq extends BaseEntity implements Serializable {
/** 项目ID */ /** 项目ID */
private Long projectId; private Long projectId;
/** 用印类型(公章/合同章/财务章等) */ /** 用印类型(对应印章文件名) */
private String sealType; private String sealType;
/** 用途说明 */ /** 用途说明 */

View File

@@ -24,7 +24,7 @@ public class HrmSealReqBo extends BaseEntity {
/** 项目ID */ /** 项目ID */
private Long projectId; private Long projectId;
/** 用印类型 */ /** 用印类型(对应印章文件名) */
@NotBlank(message = "用印类型不能为空") @NotBlank(message = "用印类型不能为空")
private String sealType; private String sealType;

View File

@@ -88,6 +88,9 @@ public class HrmSealReqVo implements Serializable {
@Excel(name = "回执附件ID列表") @Excel(name = "回执附件ID列表")
private String receiptFileIds; private String receiptFileIds;
@Excel(name = "PDF页数")
private Integer pdfPageTotal;
@Excel(name = "状态") @Excel(name = "状态")
private String status; private String status;

View File

@@ -13,6 +13,8 @@ public interface IHrmSealReqService {
HrmSealReqVo queryById(Long bizId); HrmSealReqVo queryById(Long bizId);
Integer queryPdfPageTotal(Long bizId);
TableDataInfo<HrmSealReqVo> queryPageList(HrmSealReqBo bo, PageQuery pageQuery); TableDataInfo<HrmSealReqVo> queryPageList(HrmSealReqBo bo, PageQuery pageQuery);
List<HrmSealReqVo> queryList(HrmSealReqBo bo); List<HrmSealReqVo> queryList(HrmSealReqBo bo);

View File

@@ -21,6 +21,8 @@ import com.ruoyi.hrm.service.IHrmSealReqService;
import com.ruoyi.oss.core.OssClient; import com.ruoyi.oss.core.OssClient;
import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.entity.UploadResult;
import com.ruoyi.oss.factory.OssFactory; import com.ruoyi.oss.factory.OssFactory;
import com.ruoyi.system.domain.vo.SysOssVo;
import com.ruoyi.system.mapper.SysOssMapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocument;
@@ -28,7 +30,6 @@ import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -48,10 +49,59 @@ public class HrmSealReqServiceImpl implements IHrmSealReqService {
private final HrmSealReqMapper baseMapper; private final HrmSealReqMapper baseMapper;
private final StampProperties stampProperties; private final StampProperties stampProperties;
private final IHrmFlowInstanceService flowInstanceService; private final IHrmFlowInstanceService flowInstanceService;
private final SysOssMapper sysOssMapper;
@Override @Override
public HrmSealReqVo queryById(Long bizId) { public HrmSealReqVo queryById(Long bizId) {
return baseMapper.selectVoWithProjectById(bizId); HrmSealReqVo vo = baseMapper.selectVoWithProjectById(bizId);
if (vo != null) {
vo.setPdfPageTotal(queryPdfPageTotal(bizId));
}
return vo;
}
@Override
public Integer queryPdfPageTotal(Long bizId) {
HrmSealReqVo vo = baseMapper.selectVoWithProjectById(bizId);
String applyFileIds = vo != null ? vo.getApplyFileIds() : null;
if (applyFileIds == null || applyFileIds.trim().isEmpty()) {
return 0;
}
String firstFileId = applyFileIds.split(",")[0].trim();
if (firstFileId.isEmpty()) {
return 0;
}
String fileUrl = resolveSealPdfUrl(firstFileId);
if (fileUrl == null || fileUrl.trim().isEmpty()) {
return 0;
}
try (InputStream inputStream = getObject(fileUrl); PDDocument document = PDDocument.load(inputStream)) {
return document.getNumberOfPages();
} catch (Exception e) {
log.warn("查询用印PDF页数失败 bizId={}, fileId={}, fileUrl={}", bizId, firstFileId, fileUrl, e);
return 0;
}
}
private String resolveObjectKey(String fileRef) {
if (fileRef == null) {
return null;
}
String ref = fileRef.trim();
if (ref.isEmpty()) {
return ref;
}
if (ref.startsWith("http://") || ref.startsWith("https://")) {
int idx = ref.indexOf("/files/");
if (idx >= 0) {
return ref.substring(idx + "/files/".length());
}
idx = ref.indexOf("/files%2F");
if (idx >= 0) {
return ref.substring(idx + "/files%2F".length());
}
}
return ref;
} }
@Override @Override
@@ -269,6 +319,17 @@ public class HrmSealReqServiceImpl implements IHrmSealReqService {
} }
} }
private String resolveSealPdfUrl(String ossIdText) {
try {
Long ossId = Long.valueOf(ossIdText);
SysOssVo sysOss = sysOssMapper.selectVoById(ossId);
return sysOss != null ? sysOss.getUrl() : null;
} catch (Exception e) {
log.warn("解析用印PDF文件地址失败 ossIdText={}", ossIdText, e);
return null;
}
}
private InputStream getObject(String url) { private InputStream getObject(String url) {
OssClient storage = OssFactory.instance(); OssClient storage = OssFactory.instance();
return storage.getObjectContent(url); return storage.getObjectContent(url);