输血指征修改,新增输血状态闭环

This commit is contained in:
jiangs 2026-07-21 15:19:47 +08:00
parent b11fa37c89
commit 186b154275
12 changed files with 135 additions and 36 deletions

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="com.codeverse.userSettings.MarscodeWorkspaceAppSettingsState">
<option name="chatAppRouterInfo" value="chat-session" />
<option name="progress" value="0.42" />
</component>
</project>

View File

@ -0,0 +1,31 @@
package com.czblood.bus.constants;
import java.util.Arrays;
import java.util.List;
public class BloodApplyStatusConstants {
public static final String BILL_STATUS_OPEN = "开单";
public static final String BILL_STATUS_CHECK_DOCTOR = "上级医生审核";
public static final String BILL_STATUS_ARCHIATER_CHECK = "科主任审核";
public static final String BILL_STATUS_MEDICAL_CHECK = "医务部审核";
public static final String BILL_STATUS_BANK_DIRECTOR_CHECK = "输血科审核";
public static final String BILL_STATUS_BLOOD_TYPE_CHECK = "血型复核";
public static final String BILL_STATUS_MATCH_CHECK = "交叉配血";
public static final String BILL_STATUS_OUT_CHECK = "临床发血";
public static final List<String> ALL_STATUS_LIST = Arrays.asList(
BILL_STATUS_OPEN,
BILL_STATUS_CHECK_DOCTOR,
BILL_STATUS_ARCHIATER_CHECK,
BILL_STATUS_MEDICAL_CHECK,
BILL_STATUS_BANK_DIRECTOR_CHECK,
BILL_STATUS_BLOOD_TYPE_CHECK,
BILL_STATUS_MATCH_CHECK,
BILL_STATUS_OUT_CHECK
);
public static List<String> values() {
return ALL_STATUS_LIST;
}
}

View File

@ -14,7 +14,7 @@ import java.util.Date;
@NoArgsConstructor
@ApiModel("大量用血审批")
public class XkTransfuseApplyApproval {
private String Bill_No;
private String bill_no;
private String Archiater;
private Date Archiater_CheckTime;
private String Medical_Dept;

View File

@ -12,7 +12,7 @@ import lombok.NoArgsConstructor;
@ApiModel("输血指征")
public class XkTransfuseApplyCausalis {
@ApiModelProperty("输血申请单编号")
private String Bill_No;
private String bill_no;
@ApiModelProperty("医疗机构ID")
private String Hos_ID;
private Integer SID;

View File

@ -18,7 +18,7 @@
<if test="Medical_CheckTime != null ">#{Medical_CheckTime},</if>
<if test="ApplyLevel != null and ApplyLevel != ''">#{ApplyLevel},</if>
<if test="Flag != null and Flag != ''">#{Flag},</if>
#{billNo}
#{bill_no}
)
</insert>
@ -30,8 +30,8 @@
<if test="Medical_CheckTime != null">Medical_CheckTime = #{Medical_CheckTime},</if>
<if test="ApplyLevel != null and ApplyLevel != ''">ApplyLevel = #{ApplyLevel},</if>
<if test="Flag != null and Flag != ''">Flag = #{Flag},</if>
bill_no = #{Bill_No}
where bill_no = #{Bill_No}
bill_no = #{bill_no}
where bill_no = #{bill_no}
</update>
<delete id="delete">
delete from xk_transfuse_apply_approval where bill_no = #{billNo}

View File

@ -4,7 +4,7 @@
<mapper namespace="com.czblood.bus.mapper.XkTransfuseApplyCausalisMapper">
<insert id="insert">
insert into xk_transfuse_apply_causalis (Bill_No, Hos_ID, SID,Causalis_Code,Causalis_Type,Causalis_Name,Causalis_Result,Use_Flag,Upload_Flag,Explain)
values (#{bill_no}, #{hos_id}, #{sid}, #{causalis_code}, #{causalis_type}, #{causalis_name}, #{causalis_result}, #{use_flag}, #{upload_flag}, #{explain})
values (#{bill_no}, #{hos_id}, #{SID}, #{Causalis_Code}, #{Causalis_Type}, #{Causalis_Name}, #{Causalis_Result}, #{Use_Flag}, #{Upload_Flag}, #{Explain})
</insert>
<update id="update">
update xk_transfuse_apply_causalis
@ -22,13 +22,13 @@
where Bill_No = #{bill_no} and Causalis_Code = #{Causalis_Code}
</update>
<delete id="deleteByBillNo">
delete from xk_transfuse_apply_causalis where Bill_No = #{bill_no} and Hos_ID = #{hos_id}
delete from xk_transfuse_apply_causalis where Bill_No = #{billNo} and Hos_ID = #{hos_id}
</delete>
<select id="queryList" resultType="com.czblood.bus.pojo.XkTransfuseApplyCausalis">
select * from xk_transfuse_apply_causalis where Bill_No = #{bill_no} and Hos_ID = #{hos_id}
<if test="SID != null">and sid = #{SID}</if>
select * from xk_transfuse_apply_causalis where Bill_No = #{Bill_No} and Hos_ID = #{hos_id}
<if test="SID != null">and SID = #{SID}</if>
</select>
<select id="queryListByBillNo" resultType="com.czblood.bus.pojo.XkTransfuseApplyCausalis">
select * from xk_transfuse_apply_causalis where Bill_No = #{bill_no} and Hos_ID = #{hos_id}
select * from xk_transfuse_apply_causalis where Bill_No = #{billNo} and Hos_ID = #{hos_id}
</select>
</mapper>

View File

@ -150,5 +150,11 @@ public class TransfuseApplyController extends BaseController {
return transfuseApplyService.invokeEMR(beinhos_id);
}
@ApiOperation("输血申请单状态闭环")
@GetMapping("/bloodCloseLoop")
public Result bloodCloseLoop(String billNo){
return transfuseApplyService.bloodCloseLoop(billNo);
}
}

View File

@ -0,0 +1,17 @@
package com.czblood.busDoctor.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ClosedLoopStatus {
private String statusName;
private Date occurDate;
private String occurName;
private String visible;
}

View File

@ -33,4 +33,6 @@ public interface TransfuseApplyService {
Result cancelApply(CancelApplyVO cancelApplyVO);
Result invokeEMR(String beinhosId);
Result bloodCloseLoop(String billNo);
}

View File

@ -1,6 +1,7 @@
package com.czblood.busDoctor.service.impl;
import cn.hutool.core.date.DateUtil;
import com.czblood.bus.constants.BloodApplyStatusConstants;
import com.czblood.bus.mapper.*;
import com.czblood.bus.pojo.*;
import com.czblood.bus.pojo.inter.CancelApplyCheckRequest;
@ -11,6 +12,7 @@ import com.czblood.bus.pojo.xtwh.XkDmzd;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.bus.utils.BloodInterfaceUtil;
import com.czblood.busDoctor.mapper.TransfuseApplyMapper;
import com.czblood.busDoctor.pojo.ClosedLoopStatus;
import com.czblood.busDoctor.pojo.DTO.TransfuseApplyDTO;
import com.czblood.busDoctor.pojo.DTO.TransfuseApplyInfoOne;
import com.czblood.busDoctor.pojo.VO.*;
@ -23,9 +25,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
@Service
@Slf4j
@ -313,9 +313,10 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
//xkTransfuseApply.setSend_able("Y");
//代表新增单据
String newBillNo = "";
if(billNo == null){
//产生申请单编号
String newBillNo = bloodBankUtil.produceBillNo("SQD");
newBillNo = bloodBankUtil.produceBillNo("SQD");
//申请单信息
xkTransfuseApply.setBill_no(newBillNo);
@ -328,7 +329,7 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
List<XkTransfuseApplyCausalis> xkTransfuseApplyCausalisList = transfuseApplyDTO.getXkTransfuseApplyCausalisList();
if(xkTransfuseApplyCausalisList != null && !xkTransfuseApplyCausalisList.isEmpty()){
for (XkTransfuseApplyCausalis xkTransfuseApplyCausalis : xkTransfuseApplyCausalisList) {
xkTransfuseApplyCausalis.setBill_No(newBillNo);
xkTransfuseApplyCausalis.setBill_no(newBillNo);
}
}
//检验项目明细
@ -339,16 +340,17 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
}
}
//大量用血申请单表
xkTransfuseApplyApproval.setBill_No(newBillNo);
xkTransfuseApplyApproval.setBill_no(newBillNo);
}
transfuseApplyDTO.setXkTransfuseApplyApproval(xkTransfuseApplyApproval);
//保存数据
transfuseApplyUtil.saveTransfuseApply(transfuseApplyDTO, billNo == null);
if(newBillNo.equals("")) newBillNo = billNo;
if(code.equals("0")){
return new Result("0","保存成功!");
return new Result("0","保存成功!",newBillNo);
}else{
return new Result("1",msg);
return new Result("1",msg,newBillNo);
}
}
@ -648,4 +650,51 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
return BloodInterfaceUtil.invokeBloodInterface(invokeHisEmrRequest);
}
@Override
public Result bloodCloseLoop(String billNo) {
List<String> applyStatusList = BloodApplyStatusConstants.values();
XkTransfuseApply xkTransfuseApply = xkTransfuseApplyMapper.queryOne(billNo);
List<ClosedLoopStatus> closedLoopStatusList = new ArrayList<>();
XkTransfuseApplyApproval xkTransfuseApplyApproval = xkTransfuseApplyApprovalMapper.queryOneByBillNo(billNo);
for (String statusName : applyStatusList) {
//大量用血申请表没有,说明没有科主任审核和医务科审核
if((xkTransfuseApplyApproval == null) && (statusName.equals(BloodApplyStatusConstants.BILL_STATUS_ARCHIATER_CHECK) || statusName.equals(BloodApplyStatusConstants.BILL_STATUS_MEDICAL_CHECK))) continue;
if(xkTransfuseApplyApproval != null){
String applyLevel = xkTransfuseApplyApproval.getApplyLevel();
//一级审核也没有科主任和医务科审核
if(applyLevel.equals("1") && (statusName.equals(BloodApplyStatusConstants.BILL_STATUS_ARCHIATER_CHECK) || statusName.equals(BloodApplyStatusConstants.BILL_STATUS_MEDICAL_CHECK))) continue;
//二级审核没有医务科审核
if((applyLevel.equals("2") && (statusName.equals(BloodApplyStatusConstants.BILL_STATUS_MEDICAL_CHECK)))) continue;
}
ClosedLoopStatus closedLoopStatus = new ClosedLoopStatus();
closedLoopStatus.setStatusName(statusName);
if(xkTransfuseApply == null) closedLoopStatus.setVisible("N");
switch (statusName) {
case BloodApplyStatusConstants.BILL_STATUS_OPEN:
if(xkTransfuseApply.getApply_medic() != null && !xkTransfuseApply.getApply_medic().equals("")){
closedLoopStatus.setOccurName(xkTransfuseApply.getApply_medic());
closedLoopStatus.setOccurDate(xkTransfuseApply.getApply_date());
closedLoopStatus.setVisible("Y");
}
break;
case BloodApplyStatusConstants.BILL_STATUS_CHECK_DOCTOR:
if(xkTransfuseApply.getMedic_check_date() != null){
closedLoopStatus.setOccurName(xkTransfuseApply.getCheck_medic());
closedLoopStatus.setOccurDate(xkTransfuseApply.getMedic_check_date());
closedLoopStatus.setVisible("Y");
}
break;
case BloodApplyStatusConstants.BILL_STATUS_BLOOD_TYPE_CHECK:
break;
case BloodApplyStatusConstants.BILL_STATUS_MATCH_CHECK:
break;
case BloodApplyStatusConstants.BILL_STATUS_OUT_CHECK:
break;
}
closedLoopStatusList.add(closedLoopStatus);
}
return new Result("0","获取数据成功",closedLoopStatusList);
}
}

View File

@ -63,7 +63,7 @@ public class TransfuseApprovalServiceImpl implements TransfuseApprovalService {
if(applyLevel.equals("2") && flag.equals("Y")) return new Result("1","该申请单已进行科主任核准!");
Date currentTimeDate = bloodBankUtil.getCurrentTimeDate();
XkTransfuseApplyApproval xkTransfuseApplyApprovalTemp = new XkTransfuseApplyApproval();
xkTransfuseApplyApprovalTemp.setBill_No(billNo);
xkTransfuseApplyApprovalTemp.setBill_no(billNo);
xkTransfuseApplyApprovalTemp.setArchiater( username);
xkTransfuseApplyApprovalTemp.setArchiater_CheckTime(currentTimeDate);
xkTransfuseApplyApprovalTemp.setFlag("Y");
@ -96,7 +96,7 @@ public class TransfuseApprovalServiceImpl implements TransfuseApprovalService {
if(!medicalDept.equals("")) return new Result("-1","该申请单已进行医务部审核,无需重复审核!");
Date currentTimeDate = bloodBankUtil.getCurrentTimeDate();
XkTransfuseApplyApproval xkTransfuseApplyApprovalTemp = new XkTransfuseApplyApproval();
xkTransfuseApplyApprovalTemp.setBill_No(billNo);
xkTransfuseApplyApprovalTemp.setBill_no(billNo);
xkTransfuseApplyApprovalTemp.setMedical_Dept(username);
xkTransfuseApplyApprovalTemp.setMedical_CheckTime(currentTimeDate);
xkTransfuseApplyApprovalTemp.setFlag("Y");

View File

@ -99,13 +99,13 @@ public class TransfuseApplyUtil {
flag = "N";
msg = "申请用血量≥1600ml,需科主任进入临床用血(大量用血审批)页面核准后,再报医务部门在临床用血(大量用血审批)批准!";
}
XkTransfuseApplyApproval xkTransfuseApplyApproval = null;
if(billNo == null){
xkTransfuseApplyApproval = new XkTransfuseApplyApproval();
}else{
xkTransfuseApplyApproval = xkTransfuseApplyApprovalMapper.queryOneByBillNo(billNo);
}
XkTransfuseApplyApproval xkTransfuseApplyApproval = xkTransfuseApplyApprovalMapper.queryOneByBillNo(billNo);
if(xkTransfuseApplyApproval == null) xkTransfuseApplyApproval = new XkTransfuseApplyApproval();
//有可能第一次判定的时候没有,后面修改的时候发现是大量用血
if(billNo != null && !billNo.equals("")){
xkTransfuseApplyApproval.setBill_no(billNo);
}
xkTransfuseApplyApproval.setApplyLevel(applyLev);
xkTransfuseApplyApproval.setFlag(flag);
@ -131,6 +131,7 @@ public class TransfuseApplyUtil {
String beinhosId = BloodBankUtil.isBank(xkTransfuseApply.getBeinhos_id());
String deptType = BloodBankUtil.isBank(xkTransfuseApply.getDept_Type());
String useType = BloodBankUtil.isBank(xkTransfuseApply.getUse_type());
String billNo = xkTransfuseApply.getBill_no();
//这个返回也是原来的逻辑
if(beinhosId.equals("") || deptType.equals("") || useType.equals("") ) return new Result("0","字段没有填完整,无法校验!");
XkCausalisSet xkCausalisSet = new XkCausalisSet();
@ -291,7 +292,7 @@ public class TransfuseApplyUtil {
//保存输血指征表
if(xkTransfuseApplyCausalisList != null && !xkTransfuseApplyCausalisList.isEmpty()){
xkTransfuseApplyCausalisMapper.deleteByBillNo(xkTransfuseApplyCausalisList.get(0).getBill_No());
xkTransfuseApplyCausalisMapper.deleteByBillNo(xkTransfuseApplyCausalisList.get(0).getBill_no());
for (XkTransfuseApplyCausalis xkTransfuseApplyCausalis : xkTransfuseApplyCausalisList) {
xkTransfuseApplyCausalisMapper.insert(xkTransfuseApplyCausalis);
}
@ -305,7 +306,7 @@ public class TransfuseApplyUtil {
//大量用血申请单表
if(xkTransfuseApplyApproval != null){
xkTransfuseApplyApprovalMapper.delete(xkTransfuseApplyApproval.getBill_No());
xkTransfuseApplyApprovalMapper.delete(xkTransfuseApplyApproval.getBill_no());
xkTransfuseApplyApprovalMapper.insert(xkTransfuseApplyApproval);
}