血型复核
This commit is contained in:
parent
101ba77adb
commit
1977834940
@ -3,6 +3,9 @@ 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 = "上级医生审核";
|
||||
|
||||
@ -45,4 +45,8 @@ public class BloodInterfaceTypeConstants {
|
||||
* 调用his电子病历接口
|
||||
*/
|
||||
public static final String INVOKE_HIS_EMR = "INVOKE_HIS_EMR";
|
||||
/**
|
||||
* 血型复核
|
||||
*/
|
||||
public static final String CHECK_BLOOD_TYPE = "CHECK_BLOOD_TYPE";
|
||||
}
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
package com.czblood.bus.pojo.inter;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.czblood.bus.constants.BloodInterfaceTypeConstants;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class CheckBloodTypeRequest implements BloodInterfaceType {
|
||||
|
||||
private final String method = BloodInterfaceTypeConstants.CHECK_BLOOD_TYPE;
|
||||
private String billNo;
|
||||
|
||||
@Override
|
||||
public String serializationJson() {
|
||||
return JSONUtil.toJsonStr(this);
|
||||
}
|
||||
}
|
||||
@ -86,10 +86,10 @@
|
||||
<if test="senddate != null ">senddate = #{senddate},</if>
|
||||
<if test="sendperson != null ">sendperson = #{sendperson},</if>
|
||||
<if test="createtime != null ">createtime = #{createtime},</if>
|
||||
Sample_No = #{sample_no}
|
||||
where Sample_No = #{sample_no}
|
||||
Sample_No = #{sample_No}
|
||||
where Sample_No = #{sample_No}
|
||||
</update>
|
||||
<select id="queryOne" resultType="com.czblood.bus.pojo.XkSampleInfo">
|
||||
select * from xk_sample_info where Sample_No = #{Sample_No}
|
||||
select * from xk_sample_info where Sample_No = #{sampleNo}
|
||||
</select>
|
||||
</mapper>
|
||||
@ -0,0 +1,42 @@
|
||||
package com.czblood.busBloodbank.controller;
|
||||
|
||||
import com.czblood.bus.pojo.XkCheckBloodtype;
|
||||
import com.czblood.busBloodbank.service.CheckBloodTypeService;
|
||||
import com.czblood.common.core.domain.Result;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@Api(tags = "血型复核")
|
||||
@RestController
|
||||
@RequestMapping("/bus/bloodbank/checkBloodType")
|
||||
public class CheckBloodTypeController {
|
||||
|
||||
@Resource
|
||||
private CheckBloodTypeService checkBloodTypeService;
|
||||
|
||||
@ApiOperation("获取待血型复核的单据")
|
||||
@GetMapping("/queryCheckBloodTypeInfo")
|
||||
public Result queryWaitInfo(){
|
||||
return checkBloodTypeService.queryWaitInfo();
|
||||
}
|
||||
|
||||
@ApiOperation("查询单据详情")
|
||||
@GetMapping("/queryOne")
|
||||
public Result queryOne(String billNo){
|
||||
return checkBloodTypeService.queryOne(billNo);
|
||||
}
|
||||
|
||||
@ApiOperation("保存数据")
|
||||
@PostMapping("/saveData")
|
||||
public Result saveData(@RequestBody XkCheckBloodtype xkCheckBloodtype){
|
||||
return checkBloodTypeService.saveData(xkCheckBloodtype);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
package com.czblood.busBloodbank.mapper;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface CheckBloodTypeMapper {
|
||||
List<Map<String,Object>> queryWaitInfo(String bbjszhxxfh);
|
||||
int checkMatchedBloodNotOut(String billNo);
|
||||
List<Map<String,Object>> queryOne(String billNo);
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package com.czblood.busBloodbank.pojo.DTO;
|
||||
|
||||
import com.czblood.bus.pojo.XkTransfuseApplyBloodbreed;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class CheckBloodTypeDTO {
|
||||
private List<Map<String,Object>> patientInfoList;
|
||||
private List<XkTransfuseApplyBloodbreed> xkTransfuseApplyBloodbreedList;
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package com.czblood.busBloodbank.service;
|
||||
|
||||
import com.czblood.bus.pojo.XkCheckBloodtype;
|
||||
import com.czblood.common.core.domain.Result;
|
||||
|
||||
public interface CheckBloodTypeService {
|
||||
Result queryWaitInfo();
|
||||
Result queryOne(String billNo);
|
||||
Result saveData(XkCheckBloodtype xkCheckBloodtype);
|
||||
}
|
||||
@ -0,0 +1,101 @@
|
||||
package com.czblood.busBloodbank.service.impl;
|
||||
|
||||
import com.czblood.bus.mapper.XkCheckBloodtypeMapper;
|
||||
import com.czblood.bus.mapper.XkTransfuseApplyBloodbreedMapper;
|
||||
import com.czblood.bus.mapper.XkTransfuseApplyMapper;
|
||||
import com.czblood.bus.pojo.XkCheckBloodtype;
|
||||
import com.czblood.bus.pojo.XkTransfuseApply;
|
||||
import com.czblood.bus.pojo.XkTransfuseApplyBloodbreed;
|
||||
import com.czblood.bus.pojo.inter.CheckBloodTypeRequest;
|
||||
import com.czblood.bus.utils.BloodBankUtil;
|
||||
import com.czblood.bus.utils.BloodInterfaceUtil;
|
||||
import com.czblood.busBloodbank.mapper.CheckBloodTypeMapper;
|
||||
import com.czblood.busBloodbank.pojo.DTO.CheckBloodTypeDTO;
|
||||
import com.czblood.busBloodbank.service.CheckBloodTypeService;
|
||||
import com.czblood.busBloodbank.utils.CheckBloodTypeUtil;
|
||||
import com.czblood.common.core.domain.Result;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class CheckBloodTypeServiceImpl implements CheckBloodTypeService {
|
||||
|
||||
@Resource
|
||||
CheckBloodTypeMapper checkBloodTypeMapper;
|
||||
@Resource
|
||||
BloodBankUtil bloodBankUtil;
|
||||
@Resource
|
||||
CheckBloodTypeUtil checkBloodTypeUtil;
|
||||
@Resource
|
||||
XkTransfuseApplyBloodbreedMapper xkTransfuseApplyBloodbreedMapper;
|
||||
@Resource
|
||||
XkTransfuseApplyMapper xkTransfuseApplyMapper;
|
||||
@Resource
|
||||
XkCheckBloodtypeMapper xkCheckBloodtypeMapper;
|
||||
|
||||
|
||||
@Override
|
||||
public Result queryWaitInfo() {
|
||||
//只复核标本接收之后的申请单
|
||||
String bbjszhxxfh = bloodBankUtil.getParameterValue("BBJSZHXXFH");
|
||||
List<Map<String, Object>> mapList = checkBloodTypeMapper.queryWaitInfo(bbjszhxxfh);
|
||||
return new Result("0","获取数据成功!",mapList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result queryOne(String billNo) {
|
||||
//校验单据是否有效
|
||||
Result result = checkBloodTypeUtil.checkBillNoIsValid(billNo);
|
||||
if(!result.getCode().equals("0")) return result;
|
||||
List<Map<String, Object>> mapList = checkBloodTypeMapper.queryOne(billNo);
|
||||
List<XkTransfuseApplyBloodbreed> xkTransfuseApplyBloodbreedList = xkTransfuseApplyBloodbreedMapper.queryOne(billNo);
|
||||
CheckBloodTypeDTO checkBloodTypeDTO = new CheckBloodTypeDTO();
|
||||
checkBloodTypeDTO.setPatientInfoList(mapList);
|
||||
checkBloodTypeDTO.setXkTransfuseApplyBloodbreedList(xkTransfuseApplyBloodbreedList);
|
||||
return new Result("0","查询数据成功!",checkBloodTypeDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存数据
|
||||
* @param xkCheckBloodtype
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Result saveData(XkCheckBloodtype xkCheckBloodtype) {
|
||||
String applyNo = xkCheckBloodtype.getApply_no();
|
||||
XkTransfuseApply xkTransfuseApply = xkTransfuseApplyMapper.queryOne(applyNo);
|
||||
if(xkTransfuseApply == null) return new Result("-1","若不是紧急情况,请先选择输血申请单!");
|
||||
XkCheckBloodtype xkCheckBloodtypeQuery = new XkCheckBloodtype();
|
||||
xkCheckBloodtypeQuery.setApply_no(applyNo);
|
||||
List<XkCheckBloodtype> xkCheckBloodtypeList = xkCheckBloodtypeMapper.queryList(xkCheckBloodtypeQuery);
|
||||
if(!xkCheckBloodtypeList.isEmpty()){
|
||||
String billStatus = xkCheckBloodtypeList.get(0).getBill_status();
|
||||
if(billStatus.equals("B")) return new Result("0","该申请单的血型复核单已配血,不可修改!");
|
||||
if(billStatus.equals("C")) return new Result("0","该申请单的血型复核单已发血,不可修改!");
|
||||
}
|
||||
String billSort = xkTransfuseApply.getBill_sort();
|
||||
if(billSort.equals("B")){
|
||||
xkCheckBloodtype.setBill_status("Y");
|
||||
}else{
|
||||
xkCheckBloodtype.setBill_status("N");
|
||||
}
|
||||
String newBillNo = bloodBankUtil.produceBillNo("XXFH");
|
||||
xkCheckBloodtype.setBill_no(newBillNo);
|
||||
XkTransfuseApply xkTransfuseApplyTemp = new XkTransfuseApply();
|
||||
xkTransfuseApplyTemp.setBill_no(applyNo);
|
||||
xkTransfuseApplyTemp.setBill_stasus("F");
|
||||
xkTransfuseApplyTemp.setNotify_sign("Y");
|
||||
|
||||
//当血型复核的结果和申请单之前的接口不一致的时候,需要更新申请单的血型,以及病人基本信息的血型 TODO
|
||||
|
||||
checkBloodTypeUtil.saveData(xkCheckBloodtype,xkTransfuseApplyTemp);
|
||||
//调用外部接口
|
||||
CheckBloodTypeRequest checkBloodTypeRequest = new CheckBloodTypeRequest();
|
||||
Result result = BloodInterfaceUtil.invokeBloodInterface(checkBloodTypeRequest);
|
||||
if(!result.getCode().equals("0")) return result;
|
||||
return new Result("0","保存数据成功!",newBillNo);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,65 @@
|
||||
package com.czblood.busBloodbank.utils;
|
||||
|
||||
import com.czblood.bus.mapper.XkCheckBloodtypeMapper;
|
||||
import com.czblood.bus.mapper.XkTransfuseApplyMapper;
|
||||
import com.czblood.bus.pojo.XkCheckBloodtype;
|
||||
import com.czblood.bus.pojo.XkTransfuseApply;
|
||||
import com.czblood.busBloodbank.mapper.CheckBloodTypeMapper;
|
||||
import com.czblood.common.core.domain.Result;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@Component
|
||||
public class CheckBloodTypeUtil {
|
||||
|
||||
@Resource
|
||||
XkTransfuseApplyMapper xkTransfuseApplyMapper;
|
||||
@Resource
|
||||
CheckBloodTypeMapper checkBloodTypeMapper;
|
||||
@Resource
|
||||
XkCheckBloodtypeMapper xkCheckBloodtypeMapper;
|
||||
|
||||
/**
|
||||
* 校验申请单是否有效
|
||||
* @param billNo
|
||||
* @return
|
||||
*/
|
||||
public Result checkBillNoIsValid(String billNo){
|
||||
XkTransfuseApply xkTransfuseApply = xkTransfuseApplyMapper.queryOne(billNo);
|
||||
if(xkTransfuseApply == null) return new Result("0","申请单不存在!");
|
||||
String billSort = xkTransfuseApply.getBill_sort();
|
||||
String billStasus = xkTransfuseApply.getBill_stasus();
|
||||
if(billSort.equals("C")) return new Result("-1","该申请单无需复核血型!");
|
||||
switch (billStasus){
|
||||
case "C":
|
||||
return new Result("-1","该申请单已经配血!");
|
||||
case "Z":
|
||||
return new Result("-1","该申请单已经作废!");
|
||||
case "A":
|
||||
return new Result("-1","该申请单未审核,不能进行下一步操作!");
|
||||
case "N":
|
||||
return new Result("-1","该申请单审核不通过,不能进行下一步操作!");
|
||||
case "S":
|
||||
return new Result("-1","该申请单已经追加配血,可直接在临床发血中发血!");
|
||||
case "F":
|
||||
return new Result("-1","该申请单已经复核血型!");
|
||||
case "SF":
|
||||
return new Result("-1","该申请单已追加配血!");
|
||||
case "W":
|
||||
return new Result("-1","该申请单为补单!");
|
||||
case "D":
|
||||
int count = checkBloodTypeMapper.checkMatchedBloodNotOut(billNo);
|
||||
if(count > 0) return new Result("-1","检测到该申请单尚有配好的血液未出库,请先出库该部分血液再追加配血!");
|
||||
}
|
||||
return new Result("0","校验通过!");
|
||||
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void saveData(XkCheckBloodtype xkCheckBloodtype,XkTransfuseApply xkTransfuseApply){
|
||||
xkCheckBloodtypeMapper.insert(xkCheckBloodtype);
|
||||
xkTransfuseApplyMapper.update(xkTransfuseApply);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="com.czblood.busBloodbank.mapper.CheckBloodTypeMapper">
|
||||
|
||||
<select id="queryWaitInfo" resultType="java.util.Map">
|
||||
SELECT xk_transfuse_apply.bill_no,
|
||||
xk_patient_info.patient_name,
|
||||
xk_transfuse_apply.dept_id ,apply_date,xk_transfuse_apply_bloodbreed.blood_breed
|
||||
FROM xk_transfuse_apply with (nolock) LEFT OUTER JOIN xk_patient_info with (nolock) ON xk_transfuse_apply.beinhos_id = xk_patient_info.beinhos_id ,
|
||||
xk_dmzd,xk_transfuse_apply_bloodbreed with (nolock)
|
||||
WHERE (xk_transfuse_apply.bill_no = xk_transfuse_apply_bloodbreed.bill_no) and
|
||||
(xk_transfuse_apply.check_sign = 'Y' or xk_transfuse_apply.check_sign = 'y' )and
|
||||
(xk_transfuse_apply.bill_stasus = 'b'or xk_transfuse_apply.bill_stasus = 'B')AND
|
||||
(xk_transfuse_apply.bill_sort = 'A' OR xk_transfuse_apply.bill_sort = 'B' )AND
|
||||
( xk_transfuse_apply.bill_no NOT IN ( SELECT apply_no FROM xk_match_apply))AND
|
||||
(xk_transfuse_apply.operation_type ='C' or isnull(xk_transfuse_apply.operation_type,'') = '') AND
|
||||
(((xk_transfuse_apply.check_explain = xk_dmzd.wordbook_code) AND (xk_dmzd.wordbook_sign ='sqdshyj') and (xk_dmzd.exp1 = 'Y')) OR (isnull(xk_transfuse_apply.check_explain,'') = ''))
|
||||
-- 两天前 00:00:00 当天23:59:59
|
||||
AND xk_transfuse_apply.apply_date between DATEADD(DD, DATEDIFF(DD,0,GETDATE())-2, 0) and DATEADD(SS, -1, DATEADD(DD, DATEDIFF(DD,0,GETDATE())+1, 0))
|
||||
<if test="bbjszhxxfh == 'Y'"><![CDATA[and xk_transfuse_apply.bill_no in (select Relate_ApplyNo from xk_sample_info where TakeOver_Man is not null or TakeOver_Man <> '')]]></if>
|
||||
</select>
|
||||
<select id="checkMatchedBloodNotOut" resultType="java.lang.Integer">
|
||||
SELECT Count ( xk_match_detail.blood_no )
|
||||
FROM xk_blood_info , xk_match_detail , xk_match_main , xk_transfuse_apply , xk_dmzd
|
||||
WHERE ( xk_blood_info.blood_no =xk_match_detail.blood_no ) AND
|
||||
( xk_match_detail.bill_no =xk_match_main.bill_no ) AND
|
||||
( xk_match_main.apply_no =xk_transfuse_apply.bill_no ) AND
|
||||
( xk_transfuse_apply.bill_stasus ='D' ) AND
|
||||
( xk_blood_info.blood_status ='1' ) AND
|
||||
( xk_transfuse_apply.bill_no = #{billNo} ) and
|
||||
( xk_match_detail.result =xk_dmzd.wordbook_code and
|
||||
xk_dmzd.wordbook_sign ='pxjg' and
|
||||
xk_dmzd.remark ='Y' );
|
||||
</select>
|
||||
<select id="queryOne" resultType="java.util.Map">
|
||||
SELECT
|
||||
xk_patient_info.patient_name ,
|
||||
xk_patient_info.age ,
|
||||
xk_patient_info.patient_sex ,
|
||||
xk_transfuse_apply.bill_no ,
|
||||
xk_patient_info.transfuse_history ,
|
||||
xk_patient_info.gestation_history ,
|
||||
xk_patient_info.parturition_history ,
|
||||
xk_patient_info.reaction_history ,
|
||||
xk_patient_info.match_history ,
|
||||
xk_transfuse_apply.apply_date ,
|
||||
xk_transfuse_apply.abo_type ,
|
||||
xk_transfuse_apply.rh_type ,
|
||||
xk_transfuse_apply.diagnoses ,
|
||||
xk_transfuse_apply.intent ,
|
||||
xk_transfuse_apply.apply_type ,
|
||||
xk_transfuse_apply.use3_date ,
|
||||
xk_transfuse_apply.use2_date ,
|
||||
xk_transfuse_apply.use1_date ,
|
||||
xk_transfuse_apply.beinhos_id ,
|
||||
xk_transfuse_apply.dept_id ,
|
||||
xk_transfuse_apply.patient_bed ,
|
||||
xk_transfuse_apply.zone_id,
|
||||
xk_transfuse_apply.bill_sort,
|
||||
xk_transfuse_apply.bill_stasus
|
||||
FROM xk_patient_info RIGHT OUTER JOIN xk_transfuse_apply ON xk_patient_info.beinhos_id = xk_transfuse_apply.beinhos_id
|
||||
WHERE xk_transfuse_apply.bill_no = #{billNo}
|
||||
</select>
|
||||
</mapper>
|
||||
@ -521,3 +521,15 @@ if not exists(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'xk_s
|
||||
alter table xk_search_transfuse_bill add hos_id varchar(10)
|
||||
END
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_sample_info' AND type = 'PK' )
|
||||
BEGIN
|
||||
ALTER TABLE xk_sample_info ADD CONSTRAINT PK_xk_sample_info PRIMARY KEY CLUSTERED (Sample_No);
|
||||
END
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_check_bloodtype' AND type = 'PK' )
|
||||
BEGIN
|
||||
ALTER TABLE xk_check_bloodtype ADD CONSTRAINT PK_xk_check_bloodtype PRIMARY KEY CLUSTERED (bill_no);
|
||||
END
|
||||
GO
|
||||
Loading…
x
Reference in New Issue
Block a user