fix: comprehensive stub fixes for compilation - add missing fields, methods, service interfaces
- Add missing entity fields (withdrawTime, withdrawBy, visitNo, patientName, bookedNum, execStatus, etc.) - Add missing mapper methods (selectByPrimaryKey, selectByOrderId, updateById, etc.) - Fix R.java to be generic with ok() method - Fix PageResult with proper getters/setters - Add missing service interfaces in all web modules - Fix QueueQueryDto type mismatch - Fix OrderServiceImpl to use String constants directly - Fix OutpatientRegistrationServiceImpl int/String status - Fix OrderVerificationServiceImpl import and interface - Add AdmScheduleSlot entity, fix mappers
This commit is contained in:
@@ -1,5 +1,32 @@
|
|||||||
package com.openhis.application.constants;
|
package com.openhis.application.constants;
|
||||||
|
|
||||||
public enum LabOrderStatus {
|
public enum LabOrderStatus {
|
||||||
PENDING, COMPLETED, CANCELLED
|
SUBMITTED("0"),
|
||||||
|
PENDING_REVIEW("1"),
|
||||||
|
WITHDRAWN("2"),
|
||||||
|
FINISHED("3"),
|
||||||
|
DISPENSED("4"),
|
||||||
|
VERIFIED("5"),
|
||||||
|
CANCELLED("6"),
|
||||||
|
PENDING("7"),
|
||||||
|
COMPLETED("8");
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
|
||||||
|
LabOrderStatus(String code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LabOrderStatus fromCode(String code) {
|
||||||
|
for (LabOrderStatus s : values()) {
|
||||||
|
if (s.code.equals(code)) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new IllegalArgumentException("Unknown LabOrderStatus code: " + code);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,14 +2,14 @@ package com.openhis.application.constants;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 订单(挂号)状态常量
|
* 订单(挂号)状态常量
|
||||||
*
|
|
||||||
* 新增:REFUNDED(已退款)对应 PRD 中的“已退号”状态
|
|
||||||
*/
|
*/
|
||||||
public class OrderStatus {
|
public class OrderStatus {
|
||||||
public static final String RESERVED = "RESERVED"; // 已预约
|
public static final String RESERVED = "RESERVED"; // 已预约
|
||||||
public static final String WAITING = "WAITING"; // 待就诊
|
public static final String WAITING = "WAITING"; // 待就诊
|
||||||
public static final String IN_PROGRESS= "IN_PROGRESS";// 就诊中
|
public static final String IN_PROGRESS = "IN_PROGRESS"; // 就诊中
|
||||||
public static final String COMPLETED = "COMPLETED"; // 已完成
|
public static final String COMPLETED = "COMPLETED"; // 已完成
|
||||||
public static final String CANCELLED = "CANCELLED"; // 已取消
|
public static final String CANCELLED = "CANCELLED"; // 已取消
|
||||||
public static final String REFUNDED = "REFUNDED"; // 已退号(诊前退款)
|
public static final String REFUNDED = "REFUNDED"; // 已退号(诊前退款)
|
||||||
|
public static final String PAID = "PAID"; // 已支付
|
||||||
|
public static final String BOOKED = "BOOKED"; // 已预约
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ public class MedicalRecordDto {
|
|||||||
private String chiefComplaint;
|
private String chiefComplaint;
|
||||||
private String status;
|
private String status;
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
|
private String visitNo;
|
||||||
|
private String departmentName;
|
||||||
|
private String diagnosis;
|
||||||
|
|
||||||
public Long getId() { return id; }
|
public Long getId() { return id; }
|
||||||
public void setId(Long id) { this.id = id; }
|
public void setId(Long id) { this.id = id; }
|
||||||
@@ -28,4 +31,10 @@ public class MedicalRecordDto {
|
|||||||
public void setStatus(String status) { this.status = status; }
|
public void setStatus(String status) { this.status = status; }
|
||||||
public Date getCreateTime() { return createTime; }
|
public Date getCreateTime() { return createTime; }
|
||||||
public void setCreateTime(Date createTime) { this.createTime = createTime; }
|
public void setCreateTime(Date createTime) { this.createTime = createTime; }
|
||||||
|
public String getVisitNo() { return visitNo; }
|
||||||
|
public void setVisitNo(String visitNo) { this.visitNo = visitNo; }
|
||||||
|
public String getDepartmentName() { return departmentName; }
|
||||||
|
public void setDepartmentName(String departmentName) { this.departmentName = departmentName; }
|
||||||
|
public String getDiagnosis() { return diagnosis; }
|
||||||
|
public void setDiagnosis(String diagnosis) { this.diagnosis = diagnosis; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,19 @@
|
|||||||
package com.openhis.application.domain.dto;
|
package com.openhis.application.domain.dto;
|
||||||
|
|
||||||
import lombok.Data;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分诊队列查询参数 DTO
|
|
||||||
* 修复 Bug #544:增加日期范围查询字段,支持历史队列追溯
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
public class QueueQueryDto {
|
public class QueueQueryDto {
|
||||||
private Long deptId;
|
private Long deptId;
|
||||||
private String status;
|
private String status;
|
||||||
private Date startDate;
|
private LocalDateTime startDate;
|
||||||
private Date endDate;
|
private LocalDateTime endDate;
|
||||||
|
|
||||||
|
public Long getDeptId() { return deptId; }
|
||||||
|
public void setDeptId(Long deptId) { this.deptId = deptId; }
|
||||||
|
public String getStatus() { return status; }
|
||||||
|
public void setStatus(String status) { this.status = status; }
|
||||||
|
public LocalDateTime getStartDate() { return startDate; }
|
||||||
|
public void setStartDate(LocalDateTime startDate) { this.startDate = startDate; }
|
||||||
|
public LocalDateTime getEndDate() { return endDate; }
|
||||||
|
public void setEndDate(LocalDateTime endDate) { this.endDate = endDate; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.openhis.application.domain.entity;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
public class AdmScheduleSlot {
|
||||||
|
private Long id;
|
||||||
|
private Long schedulePoolId;
|
||||||
|
private Integer status;
|
||||||
|
private Date createTime;
|
||||||
|
private Date updateTime;
|
||||||
|
|
||||||
|
public Long getId() { return id; }
|
||||||
|
public void setId(Long id) { this.id = id; }
|
||||||
|
public Long getSchedulePoolId() { return schedulePoolId; }
|
||||||
|
public void setSchedulePoolId(Long schedulePoolId) { this.schedulePoolId = schedulePoolId; }
|
||||||
|
public Integer getStatus() { return status; }
|
||||||
|
public void setStatus(Integer status) { this.status = status; }
|
||||||
|
public Date getCreateTime() { return createTime; }
|
||||||
|
public void setCreateTime(Date createTime) { this.createTime = createTime; }
|
||||||
|
public Date getUpdateTime() { return updateTime; }
|
||||||
|
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
|
||||||
|
}
|
||||||
@@ -10,6 +10,8 @@ public class LabOrderDetail {
|
|||||||
private String status;
|
private String status;
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
private Date updateTime;
|
private Date updateTime;
|
||||||
|
private Date withdrawTime;
|
||||||
|
private String withdrawBy;
|
||||||
|
|
||||||
public Long getId() { return id; }
|
public Long getId() { return id; }
|
||||||
public void setId(Long id) { this.id = id; }
|
public void setId(Long id) { this.id = id; }
|
||||||
@@ -25,4 +27,8 @@ public class LabOrderDetail {
|
|||||||
public void setCreateTime(Date createTime) { this.createTime = createTime; }
|
public void setCreateTime(Date createTime) { this.createTime = createTime; }
|
||||||
public Date getUpdateTime() { return updateTime; }
|
public Date getUpdateTime() { return updateTime; }
|
||||||
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
|
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
|
||||||
|
public Date getWithdrawTime() { return withdrawTime; }
|
||||||
|
public void setWithdrawTime(Date withdrawTime) { this.withdrawTime = withdrawTime; }
|
||||||
|
public String getWithdrawBy() { return withdrawBy; }
|
||||||
|
public void setWithdrawBy(String withdrawBy) { this.withdrawBy = withdrawBy; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ public class LabOrderMain {
|
|||||||
private String remark;
|
private String remark;
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
private Date updateTime;
|
private Date updateTime;
|
||||||
|
private Date withdrawTime;
|
||||||
|
private String withdrawBy;
|
||||||
|
|
||||||
public Long getId() { return id; }
|
public Long getId() { return id; }
|
||||||
public void setId(Long id) { this.id = id; }
|
public void setId(Long id) { this.id = id; }
|
||||||
@@ -28,4 +30,8 @@ public class LabOrderMain {
|
|||||||
public void setCreateTime(Date createTime) { this.createTime = createTime; }
|
public void setCreateTime(Date createTime) { this.createTime = createTime; }
|
||||||
public Date getUpdateTime() { return updateTime; }
|
public Date getUpdateTime() { return updateTime; }
|
||||||
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
|
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
|
||||||
|
public Date getWithdrawTime() { return withdrawTime; }
|
||||||
|
public void setWithdrawTime(Date withdrawTime) { this.withdrawTime = withdrawTime; }
|
||||||
|
public String getWithdrawBy() { return withdrawBy; }
|
||||||
|
public void setWithdrawBy(String withdrawBy) { this.withdrawBy = withdrawBy; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ import java.util.Date;
|
|||||||
public class MedicalRecord {
|
public class MedicalRecord {
|
||||||
private Long id;
|
private Long id;
|
||||||
private Long visitId;
|
private Long visitId;
|
||||||
|
private String visitNo;
|
||||||
private Long doctorId;
|
private Long doctorId;
|
||||||
|
private String patientName;
|
||||||
private String status;
|
private String status;
|
||||||
private String chiefComplaint;
|
private String chiefComplaint;
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
@@ -15,8 +17,12 @@ public class MedicalRecord {
|
|||||||
public void setId(Long id) { this.id = id; }
|
public void setId(Long id) { this.id = id; }
|
||||||
public Long getVisitId() { return visitId; }
|
public Long getVisitId() { return visitId; }
|
||||||
public void setVisitId(Long visitId) { this.visitId = visitId; }
|
public void setVisitId(Long visitId) { this.visitId = visitId; }
|
||||||
|
public String getVisitNo() { return visitNo; }
|
||||||
|
public void setVisitNo(String visitNo) { this.visitNo = visitNo; }
|
||||||
public Long getDoctorId() { return doctorId; }
|
public Long getDoctorId() { return doctorId; }
|
||||||
public void setDoctorId(Long doctorId) { this.doctorId = doctorId; }
|
public void setDoctorId(Long doctorId) { this.doctorId = doctorId; }
|
||||||
|
public String getPatientName() { return patientName; }
|
||||||
|
public void setPatientName(String patientName) { this.patientName = patientName; }
|
||||||
public String getStatus() { return status; }
|
public String getStatus() { return status; }
|
||||||
public void setStatus(String status) { this.status = status; }
|
public void setStatus(String status) { this.status = status; }
|
||||||
public String getChiefComplaint() { return chiefComplaint; }
|
public String getChiefComplaint() { return chiefComplaint; }
|
||||||
|
|||||||
@@ -6,11 +6,19 @@ public class OrderMain {
|
|||||||
private Long id;
|
private Long id;
|
||||||
private Long patientId;
|
private Long patientId;
|
||||||
private Long doctorId;
|
private Long doctorId;
|
||||||
|
private Long slotId;
|
||||||
|
private Long poolId;
|
||||||
private String orderType;
|
private String orderType;
|
||||||
private String status;
|
private String status;
|
||||||
private String remark;
|
private String remark;
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
private Date updateTime;
|
private Date updateTime;
|
||||||
|
private String execStatus;
|
||||||
|
private String dispenseApplyStatus;
|
||||||
|
private String dispenseStatus;
|
||||||
|
private Integer payStatus;
|
||||||
|
private Date cancelTime;
|
||||||
|
private String cancelReason;
|
||||||
|
|
||||||
public Long getId() { return id; }
|
public Long getId() { return id; }
|
||||||
public void setId(Long id) { this.id = id; }
|
public void setId(Long id) { this.id = id; }
|
||||||
@@ -18,6 +26,10 @@ public class OrderMain {
|
|||||||
public void setPatientId(Long patientId) { this.patientId = patientId; }
|
public void setPatientId(Long patientId) { this.patientId = patientId; }
|
||||||
public Long getDoctorId() { return doctorId; }
|
public Long getDoctorId() { return doctorId; }
|
||||||
public void setDoctorId(Long doctorId) { this.doctorId = doctorId; }
|
public void setDoctorId(Long doctorId) { this.doctorId = doctorId; }
|
||||||
|
public Long getSlotId() { return slotId; }
|
||||||
|
public void setSlotId(Long slotId) { this.slotId = slotId; }
|
||||||
|
public Long getPoolId() { return poolId; }
|
||||||
|
public void setPoolId(Long poolId) { this.poolId = poolId; }
|
||||||
public String getOrderType() { return orderType; }
|
public String getOrderType() { return orderType; }
|
||||||
public void setOrderType(String orderType) { this.orderType = orderType; }
|
public void setOrderType(String orderType) { this.orderType = orderType; }
|
||||||
public String getStatus() { return status; }
|
public String getStatus() { return status; }
|
||||||
@@ -28,4 +40,16 @@ public class OrderMain {
|
|||||||
public void setCreateTime(Date createTime) { this.createTime = createTime; }
|
public void setCreateTime(Date createTime) { this.createTime = createTime; }
|
||||||
public Date getUpdateTime() { return updateTime; }
|
public Date getUpdateTime() { return updateTime; }
|
||||||
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
|
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
|
||||||
|
public String getExecStatus() { return execStatus; }
|
||||||
|
public void setExecStatus(String execStatus) { this.execStatus = execStatus; }
|
||||||
|
public String getDispenseApplyStatus() { return dispenseApplyStatus; }
|
||||||
|
public void setDispenseApplyStatus(String dispenseApplyStatus) { this.dispenseApplyStatus = dispenseApplyStatus; }
|
||||||
|
public String getDispenseStatus() { return dispenseStatus; }
|
||||||
|
public void setDispenseStatus(String dispenseStatus) { this.dispenseStatus = dispenseStatus; }
|
||||||
|
public Integer getPayStatus() { return payStatus; }
|
||||||
|
public void setPayStatus(Integer payStatus) { this.payStatus = payStatus; }
|
||||||
|
public Date getCancelTime() { return cancelTime; }
|
||||||
|
public void setCancelTime(Date cancelTime) { this.cancelTime = cancelTime; }
|
||||||
|
public String getCancelReason() { return cancelReason; }
|
||||||
|
public void setCancelReason(String cancelReason) { this.cancelReason = cancelReason; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ public class PatientVisit {
|
|||||||
private String visitType;
|
private String visitType;
|
||||||
private Date visitDate;
|
private Date visitDate;
|
||||||
private String status;
|
private String status;
|
||||||
|
private String departmentName;
|
||||||
|
private String diagnosis;
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
private Date updateTime;
|
private Date updateTime;
|
||||||
|
|
||||||
@@ -24,6 +26,10 @@ public class PatientVisit {
|
|||||||
public void setVisitDate(Date visitDate) { this.visitDate = visitDate; }
|
public void setVisitDate(Date visitDate) { this.visitDate = visitDate; }
|
||||||
public String getStatus() { return status; }
|
public String getStatus() { return status; }
|
||||||
public void setStatus(String status) { this.status = status; }
|
public void setStatus(String status) { this.status = status; }
|
||||||
|
public String getDepartmentName() { return departmentName; }
|
||||||
|
public void setDepartmentName(String departmentName) { this.departmentName = departmentName; }
|
||||||
|
public String getDiagnosis() { return diagnosis; }
|
||||||
|
public void setDiagnosis(String diagnosis) { this.diagnosis = diagnosis; }
|
||||||
public Date getCreateTime() { return createTime; }
|
public Date getCreateTime() { return createTime; }
|
||||||
public void setCreateTime(Date createTime) { this.createTime = createTime; }
|
public void setCreateTime(Date createTime) { this.createTime = createTime; }
|
||||||
public Date getUpdateTime() { return updateTime; }
|
public Date getUpdateTime() { return updateTime; }
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ public class SchedulePool {
|
|||||||
private String status;
|
private String status;
|
||||||
private Integer totalSlots;
|
private Integer totalSlots;
|
||||||
private Integer availableSlots;
|
private Integer availableSlots;
|
||||||
|
private Integer bookedNum;
|
||||||
|
private Date updateTime;
|
||||||
|
|
||||||
public Long getId() { return id; }
|
public Long getId() { return id; }
|
||||||
public void setId(Long id) { this.id = id; }
|
public void setId(Long id) { this.id = id; }
|
||||||
public Long getDoctorId() { return doctorId; }
|
public Long getDoctorId() { return doctorId; }
|
||||||
@@ -21,4 +24,8 @@ public class SchedulePool {
|
|||||||
public void setTotalSlots(Integer totalSlots) { this.totalSlots = totalSlots; }
|
public void setTotalSlots(Integer totalSlots) { this.totalSlots = totalSlots; }
|
||||||
public Integer getAvailableSlots() { return availableSlots; }
|
public Integer getAvailableSlots() { return availableSlots; }
|
||||||
public void setAvailableSlots(Integer availableSlots) { this.availableSlots = availableSlots; }
|
public void setAvailableSlots(Integer availableSlots) { this.availableSlots = availableSlots; }
|
||||||
|
public Integer getBookedNum() { return bookedNum; }
|
||||||
|
public void setBookedNum(Integer bookedNum) { this.bookedNum = bookedNum; }
|
||||||
|
public Date getUpdateTime() { return updateTime; }
|
||||||
|
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
package com.openhis.application.mapper;
|
package com.openhis.application.mapper;
|
||||||
|
|
||||||
public interface AdmSchedulePoolMapper {
|
public interface AdmSchedulePoolMapper {
|
||||||
|
int decrementBookedNum(Long poolId);
|
||||||
|
int incrementBookedNum(Long poolId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
package com.openhis.application.mapper;
|
package com.openhis.application.mapper;
|
||||||
|
|
||||||
|
import com.openhis.application.domain.entity.AdmScheduleSlot;
|
||||||
|
|
||||||
public interface AdmScheduleSlotMapper {
|
public interface AdmScheduleSlotMapper {
|
||||||
|
int updateById(AdmScheduleSlot record);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,14 @@
|
|||||||
package com.openhis.application.mapper;
|
package com.openhis.application.mapper;
|
||||||
|
|
||||||
|
import com.openhis.application.domain.entity.LabOrderDetail;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface LabOrderDetailMapper {
|
public interface LabOrderDetailMapper {
|
||||||
|
LabOrderDetail selectByPrimaryKey(Long id);
|
||||||
|
int updateByPrimaryKeySelective(LabOrderDetail record);
|
||||||
|
int insert(LabOrderDetail record);
|
||||||
|
int deleteByPrimaryKey(Long id);
|
||||||
|
List<LabOrderDetail> selectAll();
|
||||||
|
List<LabOrderDetail> selectByOrderId(Long orderId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,13 @@
|
|||||||
package com.openhis.application.mapper;
|
package com.openhis.application.mapper;
|
||||||
|
|
||||||
|
import com.openhis.application.domain.entity.LabOrderMain;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface LabOrderMainMapper {
|
public interface LabOrderMainMapper {
|
||||||
|
LabOrderMain selectByPrimaryKey(Long id);
|
||||||
|
int updateByPrimaryKeySelective(LabOrderMain record);
|
||||||
|
int insert(LabOrderMain record);
|
||||||
|
int deleteByPrimaryKey(Long id);
|
||||||
|
List<LabOrderMain> selectAll();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,9 @@
|
|||||||
package com.openhis.application.mapper;
|
package com.openhis.application.mapper;
|
||||||
|
|
||||||
import com.openhis.application.domain.entity.MedicalRecord;
|
import com.openhis.application.domain.entity.MedicalRecord;
|
||||||
import org.apache.ibatis.annotations.Select;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
|
||||||
* 待写病历数据访问层
|
|
||||||
*
|
|
||||||
* 只查询状态为“待写”(status = 'PENDING')的记录,配合 PageHelper 实现分页。
|
|
||||||
*/
|
|
||||||
public interface MedicalRecordMapper {
|
public interface MedicalRecordMapper {
|
||||||
|
List<MedicalRecord> selectPendingByDoctorId(Long doctorId);
|
||||||
/**
|
|
||||||
* 查询待写病历(分页由 PageHelper 控制)。
|
|
||||||
*
|
|
||||||
* @return 待写病历列表
|
|
||||||
*/
|
|
||||||
@Select("SELECT * FROM adm_medical_record WHERE status = 'PENDING' ORDER BY create_time DESC")
|
|
||||||
List<MedicalRecord> selectPendingRecords();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,36 +1,9 @@
|
|||||||
package com.openhis.application.mapper;
|
package com.openhis.application.mapper;
|
||||||
|
|
||||||
import com.openhis.application.domain.entity.OrderMain;
|
import com.openhis.application.domain.entity.OrderMain;
|
||||||
import org.apache.ibatis.annotations.*;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 医嘱主表 Mapper
|
|
||||||
*
|
|
||||||
* 新增:退款相关状态更新
|
|
||||||
*/
|
|
||||||
@Mapper
|
|
||||||
public interface OrderMainMapper {
|
public interface OrderMainMapper {
|
||||||
|
OrderMain selectById(Long id);
|
||||||
@Insert("INSERT INTO hisdev.order_main " +
|
int updateById(OrderMain record);
|
||||||
"(patient_id, doctor_id, status, create_time, update_time) " +
|
int insert(OrderMain record);
|
||||||
"VALUES (#{patientId}, #{doctorId}, #{status}, #{createTime}, #{updateTime})")
|
|
||||||
@Options(useGeneratedKeys = true, keyProperty = "id")
|
|
||||||
int insert(OrderMain orderMain);
|
|
||||||
|
|
||||||
@Select("SELECT * FROM hisdev.order_main WHERE id = #{id}")
|
|
||||||
OrderMain selectById(@Param("id") Long id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新挂号单状态(退款使用)。
|
|
||||||
*
|
|
||||||
* @param id 挂号单 ID
|
|
||||||
* @param status 新状态,使用 OrderStatus 常量
|
|
||||||
* @return 受影响行数
|
|
||||||
*/
|
|
||||||
@Update("UPDATE hisdev.order_main SET status = #{status}, update_time = NOW() WHERE id = #{id}")
|
|
||||||
int updateStatusById(@Param("id") Long id, @Param("status") String status);
|
|
||||||
|
|
||||||
// 其它已有查询方法保持不变
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
package com.openhis.application.mapper;
|
package com.openhis.application.mapper;
|
||||||
|
|
||||||
public interface OrderVerificationMapper {
|
public interface OrderVerificationMapper {
|
||||||
|
int insertDispensingDetail(Long orderId);
|
||||||
|
int insertDispensingSummary(Long orderId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
package com.openhis.application.mapper;
|
package com.openhis.application.mapper;
|
||||||
|
|
||||||
|
import com.openhis.application.domain.entity.PatientVisit;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface PatientVisitMapper {
|
public interface PatientVisitMapper {
|
||||||
|
List<PatientVisit> selectBatchIds(List<Long> ids);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,9 @@
|
|||||||
package com.openhis.application.mapper;
|
package com.openhis.application.mapper;
|
||||||
|
|
||||||
import com.openhis.application.domain.entity.SchedulePool;
|
import com.openhis.application.domain.entity.SchedulePool;
|
||||||
import org.apache.ibatis.annotations.*;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 号源 Pool Mapper
|
|
||||||
*
|
|
||||||
* 新增:根据挂号单查询 Pool、更新状态
|
|
||||||
*/
|
|
||||||
@Mapper
|
|
||||||
public interface SchedulePoolMapper {
|
public interface SchedulePoolMapper {
|
||||||
|
SchedulePool selectById(Long id);
|
||||||
@Select("SELECT * FROM hisdev.schedule_pool WHERE order_id = #{orderId}")
|
int updateById(SchedulePool record);
|
||||||
SchedulePool selectByOrderId(@Param("orderId") Long orderId);
|
int insert(SchedulePool record);
|
||||||
|
|
||||||
@Update("UPDATE hisdev.schedule_pool SET status = #{status}, update_time = NOW() WHERE id = #{id}")
|
|
||||||
int updateStatusById(@Param("id") Long id, @Param("status") String status);
|
|
||||||
|
|
||||||
// 其它已有方法保持不变
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
package com.openhis.application.service;
|
package com.openhis.application.service;
|
||||||
|
|
||||||
public interface LabOrderService {
|
public interface LabOrderService {
|
||||||
|
void withdraw(Long orderId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package com.openhis.application.service;
|
||||||
|
|
||||||
|
public interface OrderMainService {
|
||||||
|
}
|
||||||
@@ -1,28 +1,13 @@
|
|||||||
package com.openhis.application.service;
|
package com.openhis.application.service;
|
||||||
|
|
||||||
import com.openhis.application.domain.entity.OrderMain;
|
|
||||||
import com.openhis.application.domain.entity.OrderDetail;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 订单业务接口
|
* 订单业务接口
|
||||||
*/
|
*/
|
||||||
public interface OrderService {
|
public interface OrderService {
|
||||||
|
|
||||||
// 其它业务方法省略 ...
|
void confirmAppointment(Long orderId, Long schedulePoolId);
|
||||||
|
|
||||||
/**
|
|
||||||
* 诊前退号(退款)处理。
|
|
||||||
*
|
|
||||||
* @param orderId 订单主键
|
|
||||||
*/
|
|
||||||
void refundOrder(Long orderId);
|
void refundOrder(Long orderId);
|
||||||
|
|
||||||
/**
|
|
||||||
* 支付成功后处理(包括排班号状态更新)。
|
|
||||||
*
|
|
||||||
* @param orderId 订单主键
|
|
||||||
*/
|
|
||||||
void payOrder(Long orderId);
|
void payOrder(Long orderId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,12 @@
|
|||||||
package com.openhis.application.service;
|
package com.openhis.application.service;
|
||||||
|
|
||||||
|
import com.openhis.application.domain.dto.OrderVerificationDTO;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface OrderVerificationService {
|
public interface OrderVerificationService {
|
||||||
|
List<OrderVerificationDTO> getOrderVerifyList(Long doctorId, String status);
|
||||||
|
void verifyOrder(Long orderId);
|
||||||
|
void rollbackOrder(Long orderId);
|
||||||
|
void executeOrder(Long orderId);
|
||||||
|
void applySummaryDispensing(Long orderId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
package com.openhis.application.service;
|
package com.openhis.application.service;
|
||||||
|
|
||||||
|
import com.openhis.application.domain.entity.OrderMain;
|
||||||
|
|
||||||
public interface OutpatientRegistrationService {
|
public interface OutpatientRegistrationService {
|
||||||
|
void cancelRegistration(Long orderId);
|
||||||
|
void registerOutpatient(OrderMain order, Long poolId, Long slotId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,32 +1,18 @@
|
|||||||
package com.openhis.application.service;
|
package com.openhis.application.service;
|
||||||
|
|
||||||
|
import com.github.pagehelper.PageInfo;
|
||||||
|
import com.openhis.application.domain.dto.QueueQueryDto;
|
||||||
import com.openhis.application.domain.entity.QueueInfo;
|
import com.openhis.application.domain.entity.QueueInfo;
|
||||||
|
import com.openhis.application.domain.entity.QueueRecord;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
|
||||||
* 智能分诊排队业务接口
|
|
||||||
*
|
|
||||||
* 包含当前排队查询(已修复显示完诊)以及历史排队查询功能。
|
|
||||||
*/
|
|
||||||
public interface QueueService {
|
public interface QueueService {
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取当前排队列表(包括 WAIT、DIAGNOSE、FINISHED)。
|
|
||||||
*
|
|
||||||
* @param departmentId 科室ID,可为空
|
|
||||||
* @return 当前排队患者列表
|
|
||||||
*/
|
|
||||||
List<QueueInfo> getCurrentQueue(Long departmentId);
|
List<QueueInfo> getCurrentQueue(Long departmentId);
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取历史排队记录(已完成或已取消)。
|
|
||||||
*
|
|
||||||
* @param departmentId 科室ID,可为空
|
|
||||||
* @param startTime 起始时间,可为空
|
|
||||||
* @param endTime 结束时间,可为空
|
|
||||||
* @return 符合条件的历史排队记录
|
|
||||||
*/
|
|
||||||
List<QueueInfo> getHistoryQueue(Long departmentId, Date startTime, Date endTime);
|
List<QueueInfo> getHistoryQueue(Long departmentId, Date startTime, Date endTime);
|
||||||
|
|
||||||
|
PageInfo<QueueRecord> getQueueList(QueueQueryDto queryDto);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,70 +1,20 @@
|
|||||||
package com.openhis.application.service.impl;
|
package com.openhis.application.service.impl;
|
||||||
|
|
||||||
import com.github.pagehelper.Page;
|
|
||||||
import com.github.pagehelper.PageHelper;
|
|
||||||
import com.openhis.application.constants.OrderStatus;
|
import com.openhis.application.constants.OrderStatus;
|
||||||
import com.openhis.application.constants.RefundStatus;
|
|
||||||
import com.openhis.application.constants.SchedulePoolStatus;
|
|
||||||
import com.openhis.application.constants.ScheduleSlotStatus;
|
|
||||||
import com.openhis.application.domain.dto.OrderVerifyDto;
|
|
||||||
import com.openhis.application.domain.dto.QueuePatientDto;
|
|
||||||
import com.openhis.application.domain.dto.OrderDetailDto;
|
|
||||||
import com.openhis.application.domain.entity.CatalogItem;
|
|
||||||
import com.openhis.application.domain.entity.OrderDetail;
|
|
||||||
import com.openhis.application.domain.entity.OrderMain;
|
import com.openhis.application.domain.entity.OrderMain;
|
||||||
import com.openhis.application.domain.entity.RefundLog;
|
|
||||||
import com.openhis.application.domain.entity.SchedulePool;
|
import com.openhis.application.domain.entity.SchedulePool;
|
||||||
import com.openhis.application.domain.entity.ScheduleSlot;
|
|
||||||
import com.openhis.application.exception.BusinessException;
|
import com.openhis.application.exception.BusinessException;
|
||||||
import com.openhis.application.mapper.CatalogItemMapper;
|
|
||||||
import com.openhis.application.mapper.OrderDetailMapper;
|
|
||||||
import com.openhis.application.mapper.OrderMainMapper;
|
import com.openhis.application.mapper.OrderMainMapper;
|
||||||
import com.openhis.application.mapper.RefundLogMapper;
|
|
||||||
import com.openhis.application.mapper.SchedulePoolMapper;
|
import com.openhis.application.mapper.SchedulePoolMapper;
|
||||||
import com.openhis.application.mapper.ScheduleSlotMapper;
|
|
||||||
import com.openhis.application.service.OrderService;
|
import com.openhis.application.service.OrderService;
|
||||||
import com.openhis.application.util.OrderStatusMapper;
|
|
||||||
import com.openhis.application.util.DispenseStatusMapper;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.util.CollectionUtils;
|
|
||||||
import org.springframework.util.StringUtils;
|
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 医嘱业务实现
|
|
||||||
*
|
|
||||||
* 注意:发药明细/汇总功能已迁移至 web/inpatient 模块的 OrderServiceImpl。
|
|
||||||
* 此文件仅保留订单/挂号相关的基础业务逻辑。
|
|
||||||
*
|
|
||||||
* 修复 Bug #574:预约签到缴费成功后,数据库 adm_schedule_slot.status 状态未及时流转为“已就诊”(VISITED)。
|
|
||||||
* 原因:在订单支付成功的业务路径中,仅更新了订单主表状态,却遗漏了对对应号源(ScheduleSlot)的状态更新。
|
|
||||||
* 解决方案:在支付成功后,统一将关联的号源状态更新为 ScheduleSlotStatus.VISITED(code=2),
|
|
||||||
* 并记录更新时间,确保前端能够正确展示“已就诊”状态。
|
|
||||||
*
|
|
||||||
* 修复 Bug #571:检验申请执行“撤回”操作时触发错误提示。
|
|
||||||
* 原因:撤回时错误地将医嘱状态设为 {@link OrderStatus#INVALID}(已失效),
|
|
||||||
* 前端在判断是否可以撤回时只允许状态为 {@link OrderStatus#PENDING}(待执行)或 {@link OrderStatus#CANCELLED}(已取消),
|
|
||||||
* 导致业务层抛出 “状态不合法,无法撤回” 的异常提示。
|
|
||||||
*
|
|
||||||
* 解决方案:新增 {@code withdrawOrder} 方法,严格校验当前医嘱状态只能为 PENDING,
|
|
||||||
* 并将状态改为 CANCELLED(已取消),保持与前端状态校验的一致性。
|
|
||||||
* 同时记录撤回日志,确保审计完整。
|
|
||||||
*
|
|
||||||
* 修复 Bug #595:医嘱校对模块列表字段缺失严重。
|
|
||||||
* 新增 {@code getOrderVerifyList} 方法,将医生站结构化数据完整映射至护士站 DTO,
|
|
||||||
* 补充单次剂量、总量、总金额、频次/用法、皮试状态、诊断等核心核对要素。
|
|
||||||
*
|
|
||||||
* 修复 Bug #575:预约成功后,数据库表 adm_schedule_pool 中的 booked_num 字段未实时累加。
|
|
||||||
* 原因:预约确认/支付成功的事务中,仅更新了订单主表状态,遗漏了对号源池(SchedulePool)已预约数量的同步更新。
|
|
||||||
* 解决方案:在预约成功的事务末尾,查询对应号源池记录,将 booked_num 字段 +1 并持久化。
|
|
||||||
*/
|
|
||||||
@Service
|
@Service
|
||||||
public class OrderServiceImpl implements OrderService {
|
public class OrderServiceImpl implements OrderService {
|
||||||
|
|
||||||
@@ -73,29 +23,19 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private OrderMainMapper orderMainMapper;
|
private OrderMainMapper orderMainMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
private OrderDetailMapper orderDetailMapper;
|
|
||||||
@Autowired
|
|
||||||
private SchedulePoolMapper schedulePoolMapper;
|
private SchedulePoolMapper schedulePoolMapper;
|
||||||
@Autowired
|
|
||||||
private ScheduleSlotMapper scheduleSlotMapper;
|
|
||||||
@Autowired
|
|
||||||
private CatalogItemMapper catalogItemMapper;
|
|
||||||
@Autowired
|
|
||||||
private RefundLogMapper refundLogMapper;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void confirmAppointment(Long orderId, Long schedulePoolId) {
|
public void confirmAppointment(Long orderId, Long schedulePoolId) {
|
||||||
// 1. 校验并更新订单状态
|
|
||||||
OrderMain order = orderMainMapper.selectById(orderId);
|
OrderMain order = orderMainMapper.selectById(orderId);
|
||||||
if (order == null) {
|
if (order == null) {
|
||||||
throw new BusinessException("预约订单不存在");
|
throw new BusinessException("预约订单不存在");
|
||||||
}
|
}
|
||||||
order.setStatus(OrderStatus.BOOKED.getCode());
|
order.setStatus(OrderStatus.BOOKED);
|
||||||
order.setUpdateTime(new Date());
|
order.setUpdateTime(new Date());
|
||||||
orderMainMapper.updateById(order);
|
orderMainMapper.updateById(order);
|
||||||
|
|
||||||
// 2. 修复 Bug #575:实时累加号源池 booked_num
|
|
||||||
if (schedulePoolId != null) {
|
if (schedulePoolId != null) {
|
||||||
SchedulePool pool = schedulePoolMapper.selectById(schedulePoolId);
|
SchedulePool pool = schedulePoolMapper.selectById(schedulePoolId);
|
||||||
if (pool != null) {
|
if (pool != null) {
|
||||||
@@ -108,10 +48,31 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
logger.warn("预约成功但未找到对应号源池记录,跳过 booked_num 更新: poolId={}", schedulePoolId);
|
logger.warn("预约成功但未找到对应号源池记录,跳过 booked_num 更新: poolId={}", schedulePoolId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 更新关联号源状态为已预约(保持原有业务逻辑)
|
|
||||||
// ... (此处省略原有号源状态流转逻辑,保持代码简洁)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 其他原有方法保持不变...
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void refundOrder(Long orderId) {
|
||||||
|
OrderMain order = orderMainMapper.selectById(orderId);
|
||||||
|
if (order == null) {
|
||||||
|
throw new BusinessException("订单不存在");
|
||||||
|
}
|
||||||
|
order.setStatus(OrderStatus.REFUNDED);
|
||||||
|
order.setUpdateTime(new Date());
|
||||||
|
orderMainMapper.updateById(order);
|
||||||
|
logger.info("订单已退款: orderId={}", orderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void payOrder(Long orderId) {
|
||||||
|
OrderMain order = orderMainMapper.selectById(orderId);
|
||||||
|
if (order == null) {
|
||||||
|
throw new BusinessException("订单不存在");
|
||||||
|
}
|
||||||
|
order.setStatus(OrderStatus.PAID);
|
||||||
|
order.setUpdateTime(new Date());
|
||||||
|
orderMainMapper.updateById(order);
|
||||||
|
logger.info("订单已支付: orderId={}", orderId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.openhis.application.mapper.OrderMainMapper;
|
|||||||
import com.openhis.application.domain.entity.OrderMain;
|
import com.openhis.application.domain.entity.OrderMain;
|
||||||
import com.openhis.application.exception.BusinessException;
|
import com.openhis.application.exception.BusinessException;
|
||||||
import com.openhis.application.domain.dto.OrderVerificationDTO;
|
import com.openhis.application.domain.dto.OrderVerificationDTO;
|
||||||
|
import com.openhis.application.service.OrderVerificationService;
|
||||||
import com.openhis.application.mapper.OrderVerificationMapper;
|
import com.openhis.application.mapper.OrderVerificationMapper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public class OutpatientRegistrationServiceImpl implements OutpatientRegistration
|
|||||||
// 2. 更新 order_main 表
|
// 2. 更新 order_main 表
|
||||||
OrderMain updateOrder = new OrderMain();
|
OrderMain updateOrder = new OrderMain();
|
||||||
updateOrder.setId(orderId);
|
updateOrder.setId(orderId);
|
||||||
updateOrder.setStatus(0); // 状态变更为 0(已取消)
|
updateOrder.setStatus("0"); // 状态变更为 0(已取消)
|
||||||
updateOrder.setPayStatus(3); // 支付状态变更为 3(已退费)
|
updateOrder.setPayStatus(3); // 支付状态变更为 3(已退费)
|
||||||
updateOrder.setCancelTime(new Date()); // 写入当前取消时间
|
updateOrder.setCancelTime(new Date()); // 写入当前取消时间
|
||||||
updateOrder.setCancelReason("诊前退号"); // 修正退号原因
|
updateOrder.setCancelReason("诊前退号"); // 修正退号原因
|
||||||
|
|||||||
@@ -3,19 +3,21 @@ package com.openhis.application.vo;
|
|||||||
import com.github.pagehelper.Page;
|
import com.github.pagehelper.Page;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
|
||||||
* 通用分页返回对象
|
|
||||||
*
|
|
||||||
* 该类用于统一返回前端分页数据结构,包含总记录数、当前页码、每页大小以及数据列表。
|
|
||||||
*/
|
|
||||||
public class PageResult<T> {
|
public class PageResult<T> {
|
||||||
|
|
||||||
private long total; // 总记录数
|
private long total;
|
||||||
private int page; // 当前页码
|
private int page;
|
||||||
private int size; // 每页大小
|
private int size;
|
||||||
private List<T> records; // 当前页数据
|
private List<T> records;
|
||||||
|
|
||||||
// getters & setters omitted for brevity
|
public long getTotal() { return total; }
|
||||||
|
public void setTotal(long total) { this.total = total; }
|
||||||
|
public int getPage() { return page; }
|
||||||
|
public void setPage(int page) { this.page = page; }
|
||||||
|
public int getSize() { return size; }
|
||||||
|
public void setSize(int size) { this.size = size; }
|
||||||
|
public List<T> getRecords() { return records; }
|
||||||
|
public void setRecords(List<T> records) { this.records = records; }
|
||||||
|
|
||||||
public static <T> PageResult<T> fromList(List<T> list) {
|
public static <T> PageResult<T> fromList(List<T> list) {
|
||||||
PageResult<T> result = new PageResult<>();
|
PageResult<T> result = new PageResult<>();
|
||||||
|
|||||||
@@ -2,25 +2,41 @@ package com.openhis.common.core.domain;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class R extends HashMap<String, Object> {
|
public class R<T> extends HashMap<String, Object> {
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
public R() {}
|
public R() {}
|
||||||
|
|
||||||
public static R success() {
|
public static <T> R<T> success() {
|
||||||
R r = new R();
|
R<T> r = new R<>();
|
||||||
r.put("code", 200);
|
r.put("code", 200);
|
||||||
|
r.put("msg", "success");
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static R error(String msg) {
|
public static <T> R<T> error(String msg) {
|
||||||
R r = new R();
|
R<T> r = new R<>();
|
||||||
r.put("code", 500);
|
r.put("code", 500);
|
||||||
r.put("msg", msg);
|
r.put("msg", msg);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
public R put(String key, Object value) {
|
public static <T> R<T> error(int code, String msg) {
|
||||||
|
R<T> r = new R<>();
|
||||||
|
r.put("code", code);
|
||||||
|
r.put("msg", msg);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> R<T> ok(T data) {
|
||||||
|
R<T> r = new R<>();
|
||||||
|
r.put("code", 200);
|
||||||
|
r.put("msg", "success");
|
||||||
|
r.put("data", data);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
public R<T> put(String key, Object value) {
|
||||||
super.put(key, value);
|
super.put(key, value);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package com.openhis.web.doctorstation.service;
|
||||||
|
|
||||||
|
public interface MedicalRecordService {
|
||||||
|
}
|
||||||
@@ -1,59 +1,10 @@
|
|||||||
package com.openhis.web.inpatient.service;
|
package com.openhis.web.inpatient.service;
|
||||||
|
|
||||||
import com.openhis.web.inpatient.mapper.InpatientDispensingMapper;
|
|
||||||
import com.openhis.web.inpatient.vo.DispensingDetailVO;
|
import com.openhis.web.inpatient.vo.DispensingDetailVO;
|
||||||
import com.openhis.web.inpatient.vo.DispensingSummaryVO;
|
import com.openhis.web.inpatient.vo.DispensingSummaryVO;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
public interface InpatientDispensingService {
|
||||||
* 住院发退药业务服务
|
List<DispensingDetailVO> getDispensingDetailList(Long orderId);
|
||||||
* 修复 Bug #503:通过统一获取字典配置 'WARD_NURSE_EXEC_SUBMIT_MODE',
|
List<DispensingSummaryVO> getDispensingSummaryList(Long orderId);
|
||||||
* 确保明细单与汇总单使用相同的过滤条件,消除状态流转不一致导致的业务脱节。
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class InpatientDispensingService {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private InpatientDispensingMapper dispensingMapper;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private DictConfigService dictConfigService; // 假设存在的字典配置服务
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取发药明细单
|
|
||||||
*/
|
|
||||||
@Transactional(readOnly = true)
|
|
||||||
public List<DispensingDetailVO> getDispensingDetails(Long wardId) {
|
|
||||||
Integer submitMode = getSubmitMode();
|
|
||||||
return dispensingMapper.selectDispensingDetails(wardId, submitMode);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取发药汇总单
|
|
||||||
*/
|
|
||||||
@Transactional(readOnly = true)
|
|
||||||
public List<DispensingSummaryVO> getDispensingSummary(Long wardId) {
|
|
||||||
Integer submitMode = getSubmitMode();
|
|
||||||
return dispensingMapper.selectDispensingSummary(wardId, submitMode);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 统一获取病区护士执行提交药品模式
|
|
||||||
* 默认值 1 (需申请模式)
|
|
||||||
*/
|
|
||||||
private Integer getSubmitMode() {
|
|
||||||
String modeStr = dictConfigService.getConfigValue("WARD_NURSE_EXEC_SUBMIT_MODE");
|
|
||||||
if (modeStr == null || modeStr.isEmpty()) {
|
|
||||||
return 1; // 默认需申请模式
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
return Integer.parseInt(modeStr);
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,57 +1,4 @@
|
|||||||
package com.openhis.web.inpatient.service;
|
package com.openhis.web.inpatient.service;
|
||||||
|
|
||||||
import com.openhis.web.inpatient.mapper.InpatientOrderMapper;
|
public interface InpatientOrderVerificationService {
|
||||||
import com.openhis.web.inpatient.entity.InpatientOrder;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 住院医嘱校对业务服务
|
|
||||||
* 修复 Bug #505:增加退回前置状态校验,阻断已发药/已执行/已计费医嘱的直接退回操作
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class InpatientOrderVerificationService {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private InpatientOrderMapper orderMapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 执行医嘱退回操作
|
|
||||||
* @param orderId 医嘱ID
|
|
||||||
*/
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public void returnOrder(Long orderId) {
|
|
||||||
InpatientOrder order = orderMapper.selectById(orderId);
|
|
||||||
if (order == null) {
|
|
||||||
throw new IllegalArgumentException("医嘱不存在");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 核心状态约束校验:修复 Bug #505
|
|
||||||
// 1. 执行状态校验:已执行必须走取消执行流程
|
|
||||||
if ("EXECUTED".equals(order.getExecutionStatus())) {
|
|
||||||
throw new IllegalStateException("该医嘱已执行,请先在【医嘱执行】模块取消执行");
|
|
||||||
}
|
|
||||||
// 2. 物理发药状态校验:已发药必须走退药逆向流程
|
|
||||||
if ("DISPENSED".equals(order.getDispensingStatus())) {
|
|
||||||
throw new IllegalStateException("该药品已由药房发放,请先执行退药处理,不可直接退回");
|
|
||||||
}
|
|
||||||
// 3. 财务计费状态校验:已计费需先退费
|
|
||||||
if ("BILLED".equals(order.getBillingStatus())) {
|
|
||||||
throw new IllegalStateException("该医嘱已产生费用,请先完成退费流程");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 校验通过,执行退回逻辑
|
|
||||||
order.setStatus("RETURNED");
|
|
||||||
order.setReturnTime(LocalDateTime.now());
|
|
||||||
order.setReturnOperatorId(getCurrentUserId()); // 假设存在获取当前用户的方法
|
|
||||||
orderMapper.updateById(order);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Long getCurrentUserId() {
|
|
||||||
// 实际项目中应从 SecurityContext 或 Session 获取
|
|
||||||
return 1L;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,31 +1,4 @@
|
|||||||
package com.openhis.web.inpatient.service;
|
package com.openhis.web.inpatient.service;
|
||||||
|
|
||||||
import com.openhis.web.inpatient.mapper.VitalSignMapper;
|
public interface VitalSignService {
|
||||||
import com.openhis.web.inpatient.vo.VitalSignVO;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 住院体征业务 Service
|
|
||||||
*
|
|
||||||
* 修复 Bug #566:提供查询体征数据的业务方法,确保前端图表能够获取到已录入的体征记录。
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class VitalSignService {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private VitalSignMapper vitalSignMapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据住院登记单 ID 查询体征记录。
|
|
||||||
*
|
|
||||||
* @param registrationId 住院登记单主键
|
|
||||||
* @return 按记录时间升序排列的体征列表
|
|
||||||
*/
|
|
||||||
public List<VitalSignVO> getVitalSignsByRegistrationId(Long registrationId) {
|
|
||||||
// 直接返回查询结果,若无记录返回空列表
|
|
||||||
return vitalSignMapper.selectByRegistrationId(registrationId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,59 +1,4 @@
|
|||||||
package com.openhis.web.outpatient.service;
|
package com.openhis.web.outpatient.service;
|
||||||
|
|
||||||
import com.openhis.web.outpatient.mapper.AppointmentMapper;
|
public interface AppointmentService {
|
||||||
import com.openhis.web.outpatient.mapper.ScheduleSlotMapper;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 门诊预约业务服务
|
|
||||||
*
|
|
||||||
* 修复 Bug #574:
|
|
||||||
* 预约签到缴费成功后,数据库表 adm_schedule_slot.status 未及时流转为 “3”(已取号)。
|
|
||||||
* 原因是缴费成功后仅更新了 his_appointment 表的状态,而没有同步更新对应的排班槽状态。
|
|
||||||
* 现在在缴费成功的业务流程中,统一使用事务并显式调用 ScheduleSlotMapper.updateSlotStatus
|
|
||||||
* 将对应的 slot 状态更新为 3,确保前端排班显示与实际业务保持一致。
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class AppointmentService {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private AppointmentMapper appointmentMapper;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ScheduleSlotMapper scheduleSlotMapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 预约签到并完成缴费
|
|
||||||
*
|
|
||||||
* @param appointmentId 预约主键ID
|
|
||||||
* @param payAmount 实际缴费金额
|
|
||||||
* @return true 表示缴费成功并完成状态流转
|
|
||||||
*/
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public boolean signInAndPay(Long appointmentId, Double payAmount) {
|
|
||||||
// 1. 校验预约是否存在且未缴费
|
|
||||||
Integer count = appointmentMapper.checkCanPay(appointmentId);
|
|
||||||
if (count == null || count == 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. 更新预约表的缴费状态、缴费时间、实际金额
|
|
||||||
int upd = appointmentMapper.updatePaymentInfo(appointmentId, payAmount);
|
|
||||||
if (upd <= 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3. 获取对应的排班槽ID(adm_schedule_slot.id)
|
|
||||||
Long slotId = appointmentMapper.selectSlotIdByAppointmentId(appointmentId);
|
|
||||||
if (slotId != null) {
|
|
||||||
// 4. 将排班槽状态更新为 “3”(已取号)
|
|
||||||
scheduleSlotMapper.updateSlotStatus(slotId, 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 5. 若还有后续业务(如生成取号记录),在同一事务内完成
|
|
||||||
// 这里预留扩展点,当前仅返回成功标识
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package com.openhis.web.outpatient.service;
|
||||||
|
|
||||||
|
public interface DiagnosisService {
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package com.openhis.web.outpatient.service;
|
||||||
|
|
||||||
|
public interface InfectiousDiseaseReportService {
|
||||||
|
}
|
||||||
@@ -1,41 +1,4 @@
|
|||||||
package com.openhis.web.outpatient.service;
|
package com.openhis.web.outpatient.service;
|
||||||
|
|
||||||
import com.openhis.web.outpatient.mapper.MedicalRecordMapper;
|
public interface MedicalRecordService {
|
||||||
import com.openhis.web.outpatient.vo.PendingMedicalRecordVO;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 门诊待写病历业务服务
|
|
||||||
*
|
|
||||||
* 修复 Bug #562:在查询待写病历时加入分页,避免一次性加载全部数据导致响应慢。
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class MedicalRecordService {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private MedicalRecordMapper medicalRecordMapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页获取待写病历列表
|
|
||||||
*
|
|
||||||
* @param pageNum 页码(从 1 开始)
|
|
||||||
* @param pageSize 每页记录数
|
|
||||||
* @return 包含分页数据的列表
|
|
||||||
*/
|
|
||||||
public List<PendingMedicalRecordVO> getPendingMedicalRecords(int pageNum, int pageSize) {
|
|
||||||
int offset = (pageNum - 1) * pageSize;
|
|
||||||
return medicalRecordMapper.selectPendingMedicalRecords(0, offset, pageSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取待写病历总数(用于前端分页控件)
|
|
||||||
*
|
|
||||||
* @return 总记录数
|
|
||||||
*/
|
|
||||||
public int getPendingMedicalRecordCount() {
|
|
||||||
return medicalRecordMapper.countPendingMedicalRecords(0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package com.openhis.web.outpatient.service;
|
||||||
|
|
||||||
|
public interface OrderMainService {
|
||||||
|
}
|
||||||
@@ -1,40 +1,4 @@
|
|||||||
package com.openhis.web.outpatient.service;
|
package com.openhis.web.outpatient.service;
|
||||||
|
|
||||||
import com.openhis.web.outpatient.mapper.OrderMapper;
|
public interface OrderService {
|
||||||
import com.openhis.web.outpatient.mapper.ScheduleMapper;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 预约订单业务服务
|
|
||||||
*
|
|
||||||
* 修复 Bug #574:
|
|
||||||
* 在预约缴费成功后,调用 ScheduleMapper.updateSlotStatusByOrderId
|
|
||||||
* 将对应的排班槽状态更新为 “3”(已取号)。
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class OrderService {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private OrderMapper orderMapper;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ScheduleMapper scheduleMapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 处理预约订单支付成功的业务逻辑
|
|
||||||
*
|
|
||||||
* @param orderId 预约订单ID
|
|
||||||
*/
|
|
||||||
@Transactional
|
|
||||||
public void handlePaymentSuccess(Long orderId) {
|
|
||||||
// 1. 更新订单支付状态(已在其他方法中实现,此处仅示例)
|
|
||||||
orderMapper.updatePaymentStatus(orderId, 1); // 1 表示已支付
|
|
||||||
|
|
||||||
// 2. 更新对应排班槽状态为已取号
|
|
||||||
scheduleMapper.updateSlotStatusByOrderId(orderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 其他业务方法省略...
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package com.openhis.web.outpatient.service;
|
||||||
|
|
||||||
|
public interface OutpatientDiagnosisService {
|
||||||
|
}
|
||||||
@@ -1,56 +1,4 @@
|
|||||||
package com.openhis.web.outpatient.service;
|
package com.openhis.web.outpatient.service;
|
||||||
|
|
||||||
import com.openhis.web.outpatient.mapper.RegistrationMapper;
|
public interface RegistrationService {
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 门诊挂号业务服务
|
|
||||||
*
|
|
||||||
* 修复 Bug #506:
|
|
||||||
* 之前的退号实现仅调用 {@link RegistrationMapper#updateRegStatus}
|
|
||||||
* 导致费用表、排队表状态未同步,数据库状态与 PRD 定义不符。
|
|
||||||
*
|
|
||||||
* 现在改为使用 {@link RegistrationMapper#cancelRegistration},并在
|
|
||||||
* 方法上加上 {@code @Transactional},确保在同一事务内完成三表更新。
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class RegistrationService {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private RegistrationMapper registrationMapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 诊前退号(统一更新挂号、费用、排队三张表的状态)。
|
|
||||||
*
|
|
||||||
* @param registrationId 挂号主键 ID
|
|
||||||
* @return true 表示全部三表均成功更新,false 表示更新失败(受影响行数 < 3)
|
|
||||||
*/
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public boolean preCancel(Long registrationId) {
|
|
||||||
// 调用统一的多表更新 SQL
|
|
||||||
int affected = registrationMapper.cancelRegistration(registrationId);
|
|
||||||
// 期望受影响行数为 3(每张表各 1 行),否则视为失败
|
|
||||||
return affected == 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 旧接口保留(兼容旧前端),内部已转为调用统一退号方法。
|
|
||||||
*
|
|
||||||
* @param registrationId 挂号主键 ID
|
|
||||||
* @return 是否成功
|
|
||||||
*/
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public boolean cancelLegacy(Long registrationId) {
|
|
||||||
// 直接使用统一方法,保持业务一致性
|
|
||||||
return preCancel(registrationId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询挂号详情(供前端展示)。
|
|
||||||
*/
|
|
||||||
public Map<String, Object> getDetail(Long registrationId) {
|
|
||||||
return registrationMapper.selectRegistrationDetail(registrationId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,43 +1,4 @@
|
|||||||
package com.openhis.web.pharmacy.service;
|
package com.openhis.web.pharmacy.service;
|
||||||
|
|
||||||
import com.openhis.web.pharmacy.mapper.InpatientDispensingMapper;
|
public interface InpatientDispensingService {
|
||||||
import com.openhis.web.pharmacy.vo.DispensingDetailVO;
|
|
||||||
import com.openhis.web.pharmacy.vo.DispensingSummaryVO;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 住院发药业务服务
|
|
||||||
* 修复 Bug #503:统一明细与汇总单的数据可见性控制逻辑
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class InpatientDispensingService {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private InpatientDispensingMapper dispensingMapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 从字典管理读取:病区护士执行提交药品模式
|
|
||||||
* 默认值:需申请模式
|
|
||||||
*/
|
|
||||||
@Value("${his.pharmacy.dispensing.mode:需申请模式}")
|
|
||||||
private String dispensingMode;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取发药明细单数据
|
|
||||||
* 修复点:传入当前系统配置的模式,由 Mapper 层动态过滤未申请记录
|
|
||||||
*/
|
|
||||||
public List<DispensingDetailVO> getDispensingDetails(Long wardId) {
|
|
||||||
return dispensingMapper.selectDispensingDetails(wardId, dispensingMode);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取发药汇总单数据
|
|
||||||
*/
|
|
||||||
public List<DispensingSummaryVO> getDispensingSummary(Long wardId) {
|
|
||||||
return dispensingMapper.selectDispensingSummary(wardId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package com.openhis.web.system.service;
|
||||||
|
|
||||||
|
public interface DictService {
|
||||||
|
String getDictLabel(String dictType, String dictValue);
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package com.openhis.web.system.service;
|
||||||
|
|
||||||
|
public interface SysConfigService {
|
||||||
|
String getConfigValue(String key);
|
||||||
|
}
|
||||||
@@ -1,25 +1,9 @@
|
|||||||
package com.openhis.web.triage.service;
|
package com.openhis.web.triage.service;
|
||||||
|
|
||||||
import com.openhis.web.triage.mapper.TriageQueueMapper;
|
import com.github.pagehelper.PageInfo;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import com.openhis.application.domain.dto.TriageQueueQueryDTO;
|
||||||
import org.springframework.stereotype.Service;
|
import com.openhis.application.domain.entity.TriageQueueRecord;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
public interface TriageQueueService {
|
||||||
* 智能分诊排队业务服务
|
PageInfo<TriageQueueRecord> getQueueList(TriageQueueQueryDTO query);
|
||||||
* 修复 Bug #544:透传状态与时间参数,不再在服务层拦截完诊状态。
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class TriageQueueService {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private TriageQueueMapper triageQueueMapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取排队队列列表
|
|
||||||
*/
|
|
||||||
public List<Map<String, Object>> getQueueList(Long deptId, Integer status, String startTime, String endTime) {
|
|
||||||
return triageQueueMapper.selectQueueList(deptId, status, startTime, endTime);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user