交叉配血功能

This commit is contained in:
jiangs 2026-08-07 18:02:34 +08:00
parent 88d214bc24
commit dd0aaf74f1
20 changed files with 543 additions and 15 deletions

View File

@ -53,4 +53,13 @@ public class BloodInterfaceTypeConstants {
* 取消血型复核
*/
public static final String CANCEL_CHECK_BLOOD_TYPE = "CANCEL_CHECK_BLOOD_TYPE";
/**
* 交叉配血
*/
public static final String MATCH_BLOOD_TYPE = "MATCH_BLOOD_TYPE";
/**
* 作废配血单
*/
public static final String CANCEL_MATCH_BLOOD_TYPE = "CANCEL_MATCH_BLOOD_TYPE";
}

View File

@ -9,5 +9,6 @@ public interface XkCheckBloodtypeMapper {
void insert(XkCheckBloodtype xkCheckBloodtype);
XkCheckBloodtype queryOne(String billNo);
void delete(String billNo);
void update(XkCheckBloodtype xkCheckBloodtype);
}

View File

@ -0,0 +1,12 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkMatchDetail;
import java.util.List;
public interface XkMatchDetailMapper {
void insert(XkMatchDetail xkMatchDetail);
List<XkMatchDetail> queryListByBillNo(String bill_no);
void update(XkMatchDetail xkMatchDetail);
void deleteByBillNo(String bill_no);
}

View File

@ -0,0 +1,9 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkMatchMain;
public interface XkMatchMainMapper {
void insertMatch(XkMatchMain xkMatchMain);
XkMatchMain queryOne(String bill_no);
void update(XkMatchMain xkMatchMain);
}

View File

@ -62,6 +62,7 @@ public class XkCheckBloodtype {
private String bill_status;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("亚型")
private String Sub_Blood;
private String bz1;
private String hos_id;

View File

@ -26,7 +26,7 @@ public class XkMatchMain {
private String sample_id;
@ApiModelProperty("检验日期")
private Date test_date;
@ApiModelProperty("单据状态")
@ApiModelProperty("单据状态,A未发血,B已发血,ZF已作废")
private String bill_status;
@ApiModelProperty("是否配型")
private String match_sign;

View File

@ -0,0 +1,20 @@
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;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CancelMatchBloodTypeRequest implements BloodInterfaceType {
private final String method = BloodInterfaceTypeConstants.CANCEL_MATCH_BLOOD_TYPE;
private String billNo;
@Override
public String serializationJson() {
return JSONUtil.toJsonStr(this);
}
}

View File

@ -10,7 +10,6 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@Data
public class CheckBloodTypeRequest implements BloodInterfaceType {
private final String method = BloodInterfaceTypeConstants.CHECK_BLOOD_TYPE;
private String billNo;

View File

@ -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;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MatchBloodTypeRequest implements BloodInterfaceType{
private final String method = BloodInterfaceTypeConstants.MATCH_BLOOD_TYPE;
private String billNo;
@Override
public String serializationJson() {
return JSONUtil.toJsonStr(this);
}
}

View File

@ -6,9 +6,13 @@ import com.czblood.bus.cache.DmzdCache;
import com.czblood.bus.cache.OptionCache;
import com.czblood.bus.mapper.*;
import com.czblood.bus.pojo.XkBloodInfo;
import com.czblood.bus.pojo.XkCheckBloodtype;
import com.czblood.bus.pojo.XkMatchDetail;
import com.czblood.bus.pojo.XkOutMain;
import com.czblood.bus.pojo.xtwh.XkBloodBreed;
import com.czblood.bus.pojo.xtwh.XkDmzd;
import com.czblood.bus.pojo.xtwh.XkParameter;
import com.czblood.common.core.domain.Result;
import com.czblood.common.core.domain.entity.SysUser;
import com.czblood.system.mapper.SysUserMapper;
import com.czblood.system.util.CommonUtil;
@ -40,6 +44,12 @@ public class BloodBankUtil {
SysUserMapper sysUserMapper;
@Resource
XkBloodInfoMapper xkBloodInfoMapper;
@Resource
XkCheckBloodtypeMapper xkCheckBloodtypeMapper;
@Resource
XkMatchDetailMapper xkMatchDetailMapper;
@Resource
XkOutMainMapper xkOutMainMapper;
/**
@ -183,4 +193,47 @@ public class BloodBankUtil {
return xkBloodInfoMapper.queryOne(bloodNo, productNo);
}
/**
* 校验操作权限
* @param flag
* @param billNo
* @param billModify
* @param userId
* @return
*/
public Result checkOperatorModify(String flag,String billNo,boolean billModify,String userId){
//操作人是否只能修改自己操作的单据?(血型复核、交叉配血、临床发血等)Y是,N否
String usermodifyset = getParameterValue("USERMODIFYSET");
if(!usermodifyset.equals("Y")) return new Result("0","参数未开启,校验通过!");
if(!billModify) return new Result("0","校验通过!");
switch (flag){
case "XXFH": //血型复核
XkCheckBloodtype xkCheckBloodtype = xkCheckBloodtypeMapper.queryOne(billNo);
if(xkCheckBloodtype == null) return new Result("0","校验通过");
if(!xkCheckBloodtype.getTest_person().equals(userId)){
return new Result("-1","当前血型复核单[" + billNo + "]是由【" +
getUserInfo(userId).getNickName() + "】登记,您没有权限操作!");
}
break;
case "JCPX": //交叉配血
List<XkMatchDetail> xkMatchDetailList = xkMatchDetailMapper.queryListByBillNo(billNo);
if(xkMatchDetailList.isEmpty()) return new Result("0","校验通过");
List<XkMatchDetail> collect = xkMatchDetailList.stream().filter(xkMatchDetail -> xkMatchDetail.getMatch_medic().equals(userId)).collect(Collectors.toList());
if(collect.size() > 0){
return new Result("-1","当前交叉配血单[" + billNo + "]是由【" +
getUserInfo(userId).getNickName() + "】登记,您没有权限操作!");
}
break;
case "LCFX": //临床发血
XkOutMain xkOutMain = xkOutMainMapper.queryOne(billNo);
if(xkOutMain == null) return new Result("0","校验通过");
if(!xkOutMain.getHandle_person().equals(userId) || !xkOutMain.getInput_person().equals(userId)){
return new Result("-1","当前临床发血单[" + billNo + "]是由【" +
getUserInfo(userId).getNickName() + "】登记,您没有权限操作!");
}
break;
}
return new Result("0","校验通过");
}
}

View File

@ -46,6 +46,36 @@
<if test="plt_test != null">#{plt_test},</if>
#{hos_id},#{bill_no},#{apply_no},#{beinhos_id},#{patient_name},#{dept_id},#{check_abo},#{check_fabo},#{affirm_abo})
</insert>
<update id="update">
update xk_check_bloodtype set
<if test="apply_no != null">apply_no = #{apply_no},</if>
<if test="beinhos_id != null">beinhos_id = #{beinhos_id},</if>
<if test="patient_name != null">patient_name = #{patient_name},</if>
<if test="dept_id != null">dept_id = #{dept_id},</if>
<if test="check_abo != null">check_abo = #{check_abo},</if>
<if test="check_fabo != null">check_fabo = #{check_fabo},</if>
<if test="affirm_abo != null">affirm_abo = #{affirm_abo},</if>
<if test="check_rh != null">check_rh = #{check_rh},</if>
<if test="antibody1 != null">antibody1 = #{antibody1},</if>
<if test="antibody2 != null">antibody2 = #{antibody2},</if>
<if test="antibody3 != null">antibody3 = #{antibody3},</if>
<if test="affirm_antibody != null">affirm_antibody = #{affirm_antibody},</if>
<if test="proteid_test != null">proteid_test = #{proteid_test},</if>
<if test="test_person != null">test_person = #{test_person},</if>
<if test="test_date != null">test_date = #{test_date},</if>
<if test="check_person != null">check_person = #{check_person},</if>
<if test="input_person != null">input_person = #{input_person},</if>
<if test="input_date != null">input_date = #{input_date},</if>
<if test="sample_id != null">sample_id = #{sample_id},</if>
<if test="need_match != null">need_match = #{need_match},</if>
<if test="bill_sort != null">bill_sort = #{bill_sort},</if>
<if test="bill_status != null">bill_status = #{bill_status},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="Sub_Blood != null">Sub_Blood = #{Sub_Blood},</if>
<if test="bz1 != null">bz1 = #{bz1},</if>
<if test="plt_test != null">plt_test = #{plt_test},</if>
where bill_no = #{billNo}
</update>
<delete id="delete">
delete from xk_check_bloodtype where bill_no = #{billNo}
</delete>
@ -55,6 +85,7 @@
<if test="bill_no != null and bill_no != ''">and bill_no = #{bill_no}</if>
<if test="apply_no != null and apply_no != ''">and apply_no = #{apply_no}</if>
<if test="beinhos_id != null and beinhos_id != ''">and beinhos_id = #{beinhos_id}</if>
<if test="bill_status != null and bill_status != ''">and bill_status = #{bill_status}</if>
</select>
<select id="queryOne" resultType="com.czblood.bus.pojo.XkCheckBloodtype">
select * from xk_check_bloodtype where bill_no = #{billNo}

View File

@ -0,0 +1,75 @@
<?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.bus.mapper.XkMatchDetailMapper">
<insert id="insert">
insert into xk_match_detail (
<if test="check_offer_abo != null">check_offer_abo,</if>
<if test="check_offer_fabo != null">check_offer_fabo,</if>
<if test="offer_affirm_abo != null">offer_affirm_abo,</if>
<if test="check_offer_rh != null">check_offer_rh,</if>
<if test="match_medic != null">match_medic,</if>
<if test="second_match_medic != null">second_match_medic,</if>
<if test="match_date != null">match_date,</if>
<if test="match_method != null">match_method,</if>
<if test="check_method != null">check_method,</if>
<if test="first_side != null">first_side,</if>
<if test="second_side != null">second_side,</if>
<if test="result != null">result,</if>
<if test="add_sign != null">add_sign,</if>
<if test="delay_day != null">delay_day,</if>
<if test="delay_sign != null">delay_sign,</if>
<if test="position_blood != null">position_blood,</if>
<if test="position_barcode != null">position_barcode,</if>
bill_no,sid,hos_id,blood_no,product_no
)values (
<if test="check_offer_abo != null">#{check_offer_abo},</if>
<if test="check_offer_fabo != null">#{check_offer_fabo},</if>
<if test="offer_affirm_abo != null">#{offer_affirm_abo},</if>
<if test="check_offer_rh != null">#{check_offer_rh},</if>
<if test="match_medic != null">#{match_medic},</if>
<if test="second_match_medic != null">#{second_match_medic},</if>
<if test="match_date != null">#{match_date},</if>
<if test="match_method != null">#{match_method},</if>
<if test="check_method != null">#{check_method},</if>
<if test="first_side != null">#{first_side},</if>
<if test="second_side != null">#{second_side},</if>
<if test="result != null">#{result},</if>
<if test="add_sign != null">#{add_sign},</if>
<if test="delay_day != null">#{delay_day},</if>
<if test="delay_sign != null">#{delay_sign},</if>
<if test="position_blood != null">#{position_blood},</if>
<if test="position_barcode != null">#{position_barcode},</if>
#{bill_no},#{sid},#{hos_id},#{blood_no},#{product_no}
)
</insert>
<update id="update">
update xk_match_detail set
<if test="check_offer_abo != null">check_offer_abo = #{check_offer_abo},</if>
<if test="check_offer_fabo != null">check_offer_fabo = #{check_offer_fabo},</if>
<if test="offer_affirm_abo != null">offer_affirm_abo = #{offer_affirm_abo},</if>
<if test="check_offer_rh != null">check_offer_rh = #{check_offer_rh},</if>
<if test="match_medic != null">match_medic = #{match_medic},</if>
<if test="second_match_medic != null">second_match_medic = #{second_match_medic},</if>
<if test="match_date != null">match_date = #{match_date},</if>
<if test="match_method != null">match_method = #{match_method},</if>
<if test="check_method != null">check_method = #{check_method},</if>
<if test="first_side != null">first_side = #{first_side},</if>
<if test="second_side != null">second_side = #{second_side},</if>
<if test="result != null">result = #{result},</if>
<if test="add_sign != null">add_sign = #{add_sign},</if>
<if test="delay_day != null">delay_day = #{delay_day},</if>
<if test="delay_sign != null">delay_sign = #{delay_sign},</if>
<if test="position_blood != null">position_blood = #{position_blood},</if>
<if test="position_barcode != null">position_barcode = #{position_barcode},</if>
bill_no = #{bill_no}
where bill_no = #{bill_no}
</update>
<delete id="deleteByBillNo">
delete from xk_match_detail where bill_no = #{bill_no}
</delete>
<select id="queryListByBillNo" resultType="com.czblood.bus.pojo.XkMatchDetail">
select * from xk_match_detail where bill_no = #{bill_no}
</select>
</mapper>

View File

@ -0,0 +1,54 @@
<?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.bus.mapper.XkMatchMainMapper">
<insert id="insertMatch">
insert into xk_match_main (
<if test="dept_id != null">dept_id,</if>
<if test="apply_no != null">apply_no,</if>
<if test="check_no != null">check_no,</if>
<if test="sample_id != null">sample_id,</if>
<if test="test_date != null">test_date,</if>
<if test="bill_status != null">bill_status,</if>
<if test="match_sign != null">match_sign,</if>
<if test="remark != null">remark,</if>
<if test="input_person != null">input_person,</if>
<if test="input_date != null">input_date,</if>
<if test="last_modified != null">last_modified,</if>
bill_no,hos_id,beinhos_id,patient_name
)values (
<if test="dept_id != null">#{dept_id},</if>
<if test="apply_no != null">#{apply_no},</if>
<if test="check_no != null">#{check_no},</if>
<if test="sample_id != null">#{sample_id},</if>
<if test="test_date != null">#{test_date},</if>
<if test="bill_status != null">#{bill_status},</if>
<if test="match_sign != null">#{match_sign},</if>
<if test="remark != null">#{remark},</if>
<if test="input_person != null">#{input_person},</if>
<if test="input_date != null">#{input_date},</if>
<if test="last_modified != null">#{last_modified},</if>
#{bill_no},#{hos_id},#{beinhos_id},#{patient_name})
</insert>
<update id="update">
update xk_match_main set
<if test="beinhos_id != null">beinhos_id = #{beinhos_id},</if>
<if test="patient_name != null">patient_name = #{patient_name},</if>
<if test="dept_id != null">dept_id = #{dept_id},</if>
<if test="apply_no != null">apply_no = #{apply_no},</if>
<if test="check_no != null">check_no = #{check_no},</if>
<if test="sample_id != null">sample_id = #{sample_id},</if>
<if test="test_date != null">test_date = #{test_date},</if>
<if test="bill_status != null">bill_status = #{bill_status},</if>
<if test="match_sign != null">match_sign = #{match_sign},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="input_person != null">input_person = #{input_person},</if>
<if test="input_date != null">input_date = #{input_date},</if>
<if test="last_modified != null">last_modified = #{last_modified},</if>
bill_no = #{bill_no}
where bill_no = #{bill_no}
</update>
<select id="queryOne" resultType="com.czblood.bus.pojo.XkMatchMain">
select * from xk_match_main where bill_no = #{bill_no}
</select>
</mapper>

View File

@ -1,12 +1,13 @@
package com.czblood.busBloodbank.controller;
import com.czblood.bus.mapper.XkBloodInfoMapper;
import com.czblood.bus.pojo.XkBloodInfo;
import com.czblood.busBloodbank.pojo.VO.MatchBloodVO;
import com.czblood.busBloodbank.service.MatchBloodService;
import com.czblood.common.core.controller.BaseController;
import com.czblood.common.core.domain.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -15,7 +16,7 @@ import javax.annotation.Resource;
@Api(tags = "交叉配血")
@RestController
@RequestMapping("/bus/bloodbank/matchBlood")
public class MatchBloodController {
public class MatchBloodController extends BaseController {
@Resource
MatchBloodService matchBloodService;
@ -44,4 +45,27 @@ public class MatchBloodController {
public Result getBloodInfoMatch(String bloodNo,String productNo){
return matchBloodService.getBloodInfoMatch(bloodNo, productNo);
}
@ApiOperation("取消血液配血")
@PostMapping("/cancelBloodInfoMatch")
public Result cancelBloodInfoMatch(String bloodNo,String productNo){
return matchBloodService.cancelBloodInfoMatch(bloodNo, productNo);
}
@ApiOperation("保存数据")
@PostMapping("/saveData")
public Result saveData(MatchBloodVO matchBloodVO){
matchBloodVO.setUserId(getUsername());
return matchBloodService.saveData(matchBloodVO);
}
@ApiOperation("作废配血单")
@GetMapping("/deleteBloodInfoMatch")
public Result deleteBloodInfoMatch(String billNo){
return matchBloodService.deleteBloodInfoMatch(billNo);
}
}

View File

@ -23,4 +23,5 @@ public interface MatchBloodMapper {
int queryBloodOutHosCountTwo(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
String checkBloodNeedMatch(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
int queryOutCountThree(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
String queryChargeMainBillNo(String billNo);
}

View File

@ -0,0 +1,18 @@
package com.czblood.busBloodbank.pojo.VO;
import com.czblood.bus.pojo.XkMatchDetail;
import com.czblood.bus.pojo.XkMatchMain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MatchBloodVO {
private XkMatchMain xkMatchMain;
private List<XkMatchDetail> xkMatchDetailList;
private String userId;
}

View File

@ -1,9 +1,13 @@
package com.czblood.busBloodbank.service;
import com.czblood.busBloodbank.pojo.VO.MatchBloodVO;
import com.czblood.common.core.domain.Result;
public interface MatchBloodService {
Result queryWaitInfo();
Result queryOne(String billNo);
Result getBloodInfoMatch(String bloodNo, String productNo);
Result cancelBloodInfoMatch(String bloodNo, String productNo);
Result saveData(MatchBloodVO matchBloodVO);
Result deleteBloodInfoMatch(String billNo);
}

View File

@ -1,13 +1,17 @@
package com.czblood.busBloodbank.service.impl;
import com.czblood.bus.mapper.XkCheckBloodtypeMapper;
import com.czblood.bus.mapper.XkMatchMainMapper;
import com.czblood.bus.mapper.XkTransfuseApplyBloodbreedMapper;
import com.czblood.bus.mapper.XkTransfuseApplyMapper;
import com.czblood.bus.pojo.XkBloodInfo;
import com.czblood.bus.pojo.XkTransfuseApply;
import com.czblood.bus.pojo.XkTransfuseApplyBloodbreed;
import com.czblood.bus.pojo.*;
import com.czblood.bus.pojo.inter.CancelMatchBloodTypeRequest;
import com.czblood.bus.pojo.inter.MatchBloodTypeRequest;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.bus.utils.BloodInterfaceUtil;
import com.czblood.busBloodbank.mapper.MatchBloodMapper;
import com.czblood.busBloodbank.pojo.DTO.MatchBloodDTO;
import com.czblood.busBloodbank.pojo.VO.MatchBloodVO;
import com.czblood.busBloodbank.service.MatchBloodService;
import com.czblood.busBloodbank.utils.MatchBloodUtil;
import com.czblood.common.core.domain.Result;
@ -31,6 +35,10 @@ public class MatchBloodServiceImpl implements MatchBloodService {
XkTransfuseApplyBloodbreedMapper xkTransfuseApplyBloodbreedMapper;
@Resource
BloodBankUtil bloodBankUtil;
@Resource
XkCheckBloodtypeMapper xkCheckBloodtypeMapper;
@Resource
XkMatchMainMapper xkMatchMainMapper;
@Override
public Result queryWaitInfo() {
@ -102,12 +110,149 @@ public class MatchBloodServiceImpl implements MatchBloodService {
case "4":
return new Result("-1","该血液已经出库!");
}
int i = matchBloodMapper.queryOutCountThree(bloodNo, productNo);
if(i > 0) return new Result("-1","该血液已经登记出库信息,请检查!");
//返回数据 TODO
return new Result("0","获取数据成功!",xkBloodInfo);
}
@Override
public Result cancelBloodInfoMatch(String bloodNo, String productNo) {
int i = matchBloodMapper.queryOutCountThree(bloodNo, productNo);
if(i > 0) return new Result("-1","该血液已经登记出库信息,请检查!");
return new Result("0","取消配配血成功!");
}
@Override
public Result saveData(MatchBloodVO matchBloodVO) {
XkMatchMain xkMatchMain = matchBloodVO.getXkMatchMain();
String billNo = BloodBankUtil.isBank(xkMatchMain.getBill_no());
boolean bModify = false;
if(!billNo.equals("")) bModify = true;
Result result = bloodBankUtil.checkOperatorModify("JCPX", billNo, bModify, matchBloodVO.getUserId());
if(!result.getCode().equals("0")) return result;
String billStatus = xkMatchMain.getBill_status();
String applyNo = xkMatchMain.getApply_no();
if(bModify && billStatus.equals("B")) return new Result("-1","该配血单已发血,不可修改!");
List<XkMatchDetail> xkMatchDetailList = matchBloodVO.getXkMatchDetailList();
if(xkMatchDetailList.isEmpty()) return new Result("-1","配血血液不可为空,请先添加配血血液!");
String newBillNo = "";
if(!bModify){
//新增数据
newBillNo = bloodBankUtil.produceBillNo("PXD");
xkMatchMain.setBill_no(newBillNo);
xkMatchMain.setBill_status("A");
xkMatchMain.setMatch_sign("N");
XkTransfuseApply xkTransfuseApply = xkTransfuseApplyMapper.queryOne(applyNo);
if(xkTransfuseApply == null) return new Result("-1","该申请单不存在!");
String billStasus = xkTransfuseApply.getBill_stasus();
String checkNo = "";
String billStatusTemp = "";
XkCheckBloodtype xkCheckBloodtypeTemp = null;
if(billStasus.equals("F") || billStasus.equals("SF")){
XkCheckBloodtype xkCheckBloodtypeQuery = new XkCheckBloodtype();
xkCheckBloodtypeQuery.setApply_no(applyNo);
xkCheckBloodtypeQuery.setBill_status("A");
List<XkCheckBloodtype> xkCheckBloodtypeList = xkCheckBloodtypeMapper.queryList(xkCheckBloodtypeQuery);
if(!xkCheckBloodtypeList.isEmpty()){
checkNo = xkCheckBloodtypeList.get(0).getBill_no();
xkCheckBloodtypeTemp = new XkCheckBloodtype();
xkCheckBloodtypeTemp.setBill_no(checkNo);
xkCheckBloodtypeTemp.setBill_status("B");
}
}else{
XkCheckBloodtype xkCheckBloodtypeQuery = new XkCheckBloodtype();
xkCheckBloodtypeQuery.setApply_no(applyNo);
xkCheckBloodtypeQuery.setBill_status("C");
List<XkCheckBloodtype> xkCheckBloodtypeList = xkCheckBloodtypeMapper.queryList(xkCheckBloodtypeQuery);
if(xkCheckBloodtypeList.isEmpty()){
billStasus = "F";
}
}
XkCheckBloodtype xkCheckBloodtypeQuery1 = new XkCheckBloodtype();
xkCheckBloodtypeQuery1.setApply_no(applyNo);
List<XkCheckBloodtype> xkCheckBloodtypeList = xkCheckBloodtypeMapper.queryList(xkCheckBloodtypeQuery1);
if(xkCheckBloodtypeList.isEmpty()){
billStasus = "F";
}
xkMatchMain.setCheck_no(checkNo);
xkMatchMain.setLast_modified(bloodBankUtil.getCurrentTimeDate());
if(billStasus.equals("F")){
billStatusTemp = "C";
}else if(billStasus.equals("SF") || billStasus.equals("D")){
billStatusTemp = "S";
}
XkTransfuseApply xkTransfuseApplyTemp = new XkTransfuseApply();
xkTransfuseApplyTemp.setBill_no(applyNo);
xkTransfuseApplyTemp.setBill_stasus(billStatusTemp);
xkTransfuseApplyTemp.setNotify_sign("Y");
for (XkMatchDetail xkMatchDetail : xkMatchDetailList) {
xkMatchDetail.setBill_no(newBillNo);
}
matchBloodUtil.saveData(matchBloodVO,xkCheckBloodtypeTemp,xkTransfuseApplyTemp);
}else{
//修改数据
matchBloodUtil.updateData(matchBloodVO);
}
//调用外部接口
if(billNo.equals("")) billNo = newBillNo;
MatchBloodTypeRequest matchBloodTypeRequest = new MatchBloodTypeRequest();
matchBloodTypeRequest.setBillNo(billNo);
Result result1 = BloodInterfaceUtil.invokeBloodInterface(matchBloodTypeRequest);
if(!result1.getCode().equals("0")) return result1;
return new Result("0","保存成功!");
}
@Override
public Result deleteBloodInfoMatch(String billNo) {
XkMatchMain xkMatchMain = xkMatchMainMapper.queryOne(billNo);
if(xkMatchMain == null) return new Result("-1","该配血单不存在!");
String billStatus = BloodBankUtil.isBank(xkMatchMain.getBill_status());
if(billStatus.equals("B")) return new Result("-1","该配血单已发血,不可作废!");
String chargeMainBillNo = BloodBankUtil.isBank(matchBloodMapper.queryChargeMainBillNo(billNo));
String checkNo = BloodBankUtil.isBank(xkMatchMain.getCheck_no());
XkCheckBloodtype xkCheckBloodtypeTemp = null;
if(!checkNo.equals("")){
//修改血型复核数据
xkCheckBloodtypeTemp = new XkCheckBloodtype();
xkCheckBloodtypeTemp.setBill_no(checkNo);
xkCheckBloodtypeTemp.setBill_status("A");
}
String applyNo = xkMatchMain.getApply_no();
XkTransfuseApply xkTransfuseApply = xkTransfuseApplyMapper.queryOne(applyNo);
if(xkTransfuseApply == null) return new Result("-1","该申请单不存在!");
String billStasus = xkTransfuseApply.getBill_stasus();
String newBillStatus = "";
switch (billStasus){
case "C":
newBillStatus = "F";
break;
case "S":
newBillStatus = "SF";
break;
case "I":
newBillStatus = "B";
break;
}
XkTransfuseApply xkTransfuseApplyTemp = new XkTransfuseApply();
xkTransfuseApplyTemp.setBill_no(applyNo);
xkTransfuseApplyTemp.setBill_stasus(newBillStatus);
XkMatchMain xkMatchMainTemp = new XkMatchMain();
xkMatchMainTemp.setBill_no(billNo);
xkMatchMainTemp.setBill_status("ZF");
matchBloodUtil.deleteBloodInfoMatch(chargeMainBillNo,xkMatchMainTemp,xkCheckBloodtypeTemp,xkTransfuseApplyTemp);
//调用外部接口
CancelMatchBloodTypeRequest cancelMatchBloodTypeRequest = new CancelMatchBloodTypeRequest();
cancelMatchBloodTypeRequest.setBillNo(billNo);
Result result = BloodInterfaceUtil.invokeBloodInterface(cancelMatchBloodTypeRequest);
if(!result.getCode().equals("0")) return result;
return new Result("0","作废成功!");
}
}

View File

@ -2,13 +2,14 @@ package com.czblood.busBloodbank.utils;
import cn.hutool.core.date.DateUtil;
import com.czblood.bus.mapper.XkInstorageDetailMapper;
import com.czblood.bus.pojo.XkBloodInfo;
import com.czblood.bus.pojo.XkInstorageDetail;
import com.czblood.bus.mapper.*;
import com.czblood.bus.pojo.*;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.busBloodbank.mapper.MatchBloodMapper;
import com.czblood.busBloodbank.pojo.VO.MatchBloodVO;
import com.czblood.common.core.domain.Result;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
@ -23,6 +24,18 @@ public class MatchBloodUtil {
MatchBloodMapper matchBloodMapper;
@Resource
XkInstorageDetailMapper xkInstorageDetailMapper;
@Resource
XkMatchMainMapper xkMatchMainMapper;
@Resource
XkMatchDetailMapper xkMatchDetailMapper;
@Resource
XkTransfuseApplyMapper xkTransfuseApplyMapper;
@Resource
XkCheckBloodtypeMapper xkCheckBloodtypeMapper;
@Resource
XkChargeMainMapper xkChargeMainMapper;
@Resource
XkChargeDetailMapper xkChargeDetailMapper;
public Result checkSampleValid(String applyNo){
//xkSampleInfoMapper.queryOne()
@ -93,4 +106,38 @@ public class MatchBloodUtil {
if(isMatch.equals("Y")) return new Result("0","校验通过!");
return new Result("-1","该血液流水号:"+bloodNo+"产品码:"+productNo+"该血液流水号对应的血液不需要进行配血操作!");
}
@Transactional(rollbackFor = Exception.class)
public void saveData(MatchBloodVO matchBloodVO, XkCheckBloodtype xkCheckBloodtype, XkTransfuseApply xkTransfuseApply){
XkMatchMain xkMatchMain = matchBloodVO.getXkMatchMain();
List<XkMatchDetail> xkMatchDetailList = matchBloodVO.getXkMatchDetailList();
xkMatchMainMapper.insertMatch(xkMatchMain);
for (XkMatchDetail xkMatchDetail : xkMatchDetailList) {
xkMatchDetailMapper.insert(xkMatchDetail);
}
if(xkTransfuseApply != null) xkTransfuseApplyMapper.update(xkTransfuseApply);
if(xkCheckBloodtype != null) xkCheckBloodtypeMapper.update(xkCheckBloodtype);
}
@Transactional(rollbackFor = Exception.class)
public void updateData(MatchBloodVO matchBloodVO){
XkMatchMain xkMatchMain = matchBloodVO.getXkMatchMain();
xkMatchMainMapper.update(xkMatchMain);
List<XkMatchDetail> xkMatchDetailList = matchBloodVO.getXkMatchDetailList();
xkMatchDetailMapper.deleteByBillNo(xkMatchMain.getBill_no());
for (XkMatchDetail xkMatchDetail : xkMatchDetailList) {
xkMatchDetailMapper.insert(xkMatchDetail);
}
}
@Transactional(rollbackFor = Exception.class)
public void deleteBloodInfoMatch(String chargeMainBillNo,XkMatchMain xkMatchMain,XkCheckBloodtype xkCheckBloodtype,XkTransfuseApply xkTransfuseApply){
if(!chargeMainBillNo.equals("")){
xkChargeMainMapper.deleteByBillNo(chargeMainBillNo);
xkChargeDetailMapper.deleteByBillNo(chargeMainBillNo);
}
xkMatchMainMapper.update(xkMatchMain);
if(xkCheckBloodtype != null) xkCheckBloodtypeMapper.update(xkCheckBloodtype);
xkTransfuseApplyMapper.update(xkTransfuseApply);
}
}

View File

@ -157,4 +157,8 @@
Where blood_no = #{bloodNo}
<![CDATA[and product_no = #{productNo} AND isnull(exp1,'N') <> 'Y']]>
</select>
<select id="queryChargeMainBillNo" resultType="java.lang.String">
SELECT xk_charge_main.bill_no FROM xk_charge_main
Where xk_charge_main.relative_billno = #{billNo} AND send_flag ='N'
</select>
</mapper>