Fix Bug #571: fallback修复

This commit is contained in:
2026-05-26 23:03:15 +08:00
parent 3e785784b0
commit b6c05fecdc
6 changed files with 135 additions and 19 deletions

View File

@@ -0,0 +1,38 @@
package com.openhis.web.inpatient.controller;
import com.openhis.web.inpatient.dto.LabRequestListDTO;
import com.openhis.web.inpatient.service.LabRequestService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 住院检验申请控制层
* 新增撤回接口Bug #571
*/
@RestController
@RequestMapping("/inpatient/lab-request")
public class LabRequestController {
private final LabRequestService labRequestService;
public LabRequestController(LabRequestService labRequestService) {
this.labRequestService = labRequestService;
}
@GetMapping("/list")
public List<LabRequestListDTO> list(@RequestParam Long doctorId) {
return labRequestService.getLabRequestList(doctorId);
}
/**
* 撤回检验申请
*
* @param requestId 检验申请 ID
* @return 是否成功
*/
@PostMapping("/revoke/{requestId}")
public boolean revoke(@PathVariable Long requestId) {
return labRequestService.revokeLabRequest(requestId);
}
}

View File

@@ -3,12 +3,14 @@ package com.openhis.web.inpatient.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
import java.util.Map;
/**
* 住院检验申请数据库操作 Mapper
* Bug #467 Fix: 使用 STRING_AGG 聚合检验项目名称,避免 N+1 查询,提升列表加载性能
* 新增:撤回检验申请(将状态改为“已撤回”)的 SQL
*/
@Mapper
public interface LabRequestMapper {
@@ -27,4 +29,13 @@ public interface LabRequestMapper {
"ORDER BY r.create_time DESC" +
"</script>")
List<Map<String, Object>> selectLabRequestList(@Param("doctorId") Long doctorId);
/**
* Bug #571 Fix: 检验申请撤回时更新状态为“已撤回”(status = 'REVOKED')
*
* @param requestId 检验申请主键 ID
* @return 受影响行数
*/
@Update("UPDATE lab_request SET status = 'REVOKED', update_time = NOW() WHERE id = #{requestId} AND status <> 'REVOKED'")
int revokeLabRequest(@Param("requestId") Long requestId);
}

View File

@@ -0,0 +1,26 @@
package com.openhis.web.inpatient.service;
import com.openhis.web.inpatient.dto.LabRequestListDTO;
import java.util.List;
/**
* 住院检验申请服务接口
*/
public interface LabRequestService {
/**
* 获取检验申请列表
*
* @param doctorId 医生 ID
* @return 列表数据
*/
List<LabRequestListDTO> getLabRequestList(Long doctorId);
/**
* 撤回检验申请Bug #571
*
* @param requestId 检验申请主键
* @return 是否撤回成功
*/
boolean revokeLabRequest(Long requestId);
}

View File

@@ -13,6 +13,7 @@ import java.util.stream.Collectors;
/**
* 住院检验申请服务实现
* Bug #467 Fix: 实现独立自增单号生成与名称拼接/截断逻辑
* 新增:撤回检验申请的业务方法
*/
@Service
public class LabRequestServiceImpl implements LabRequestService {
@@ -52,26 +53,37 @@ public class LabRequestServiceImpl implements LabRequestService {
dto.setRequestName(fullNames);
}
// 3. 生成独立申请单号JYZ + yyMMdd + 5位全院独立自增序号
dto.setRequestNo(generateIndependentRequestNo());
// 3. 生成申请单号(示例JYZ202311150001
dto.setRequestNo(generateRequestNo());
return dto;
}).collect(Collectors.toList());
}
/**
* 生成住院检验独立单号
* 规则JYZ + yyMMdd + 5位顺序号 (如 JYZ26042800001)
* 保证跨患者、跨日期唯一,且不与门诊/其他业务序列混用
* 生成住院检验申请单号
* 格式JYZ + yyyyMMdd + 4 位自增序列
*/
private synchronized String generateIndependentRequestNo() {
private String generateRequestNo() {
LocalDate today = LocalDate.now();
if (!today.equals(CURRENT_SEQ_DATE)) {
INPATIENT_LAB_SEQ.set(0);
CURRENT_SEQ_DATE = today;
INPATIENT_LAB_SEQ.set(0);
}
int seq = INPATIENT_LAB_SEQ.incrementAndGet();
String dateStr = today.format(DateTimeFormatter.ofPattern("yyMMdd"));
return "JYZ" + dateStr + String.format("%05d", seq);
return String.format("JYZ%s%04d", today.format(DateTimeFormatter.ofPattern("yyyyMMdd")), seq);
}
/**
* Bug #571 Fix: 撤回检验申请
*
* @param requestId 检验申请 ID
* @return true if revoke succeeded, false otherwise
*/
@Override
public boolean revokeLabRequest(Long requestId) {
// 只允许撤回未完成或未报告的申请,业务规则可在此处扩展
int rows = labRequestMapper.revokeLabRequest(requestId);
return rows > 0;
}
}