交叉配血功能,临床发血功能开发

This commit is contained in:
jiangs 2026-08-12 09:13:39 +08:00
parent dd0aaf74f1
commit ebfc24a73c
26 changed files with 495 additions and 23 deletions

39
.idea/misc.xml generated
View File

@ -13,6 +13,45 @@
</set> </set>
</option> </option>
</component> </component>
<component name="NullableNotNullManager">
<option name="myDefaultNullable" value="org.jetbrains.annotations.Nullable" />
<option name="myDefaultNotNull" value="org.jetbrains.annotations.NotNull" />
<option name="myOrdered" value="false" />
<option name="myNullables">
<value>
<list size="11">
<item index="0" class="java.lang.String" itemvalue="org.jspecify.annotations.Nullable" />
<item index="1" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
<item index="2" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.Nullable" />
<item index="3" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableDecl" />
<item index="4" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableType" />
<item index="5" class="java.lang.String" itemvalue="org.eclipse.jdt.annotation.Nullable" />
<item index="6" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
<item index="7" class="java.lang.String" itemvalue="jakarta.annotation.Nullable" />
<item index="8" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
<item index="9" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
<item index="10" class="java.lang.String" itemvalue="org.springframework.lang.Nullable" />
</list>
</value>
</option>
<option name="myNotNulls">
<value>
<list size="11">
<item index="0" class="java.lang.String" itemvalue="org.jspecify.annotations.NonNull" />
<item index="1" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
<item index="2" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.NonNull" />
<item index="3" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullDecl" />
<item index="4" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullType" />
<item index="5" class="java.lang.String" itemvalue="org.eclipse.jdt.annotation.NonNull" />
<item index="6" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
<item index="7" class="java.lang.String" itemvalue="jakarta.annotation.Nonnull" />
<item index="8" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="9" class="java.lang.String" itemvalue="lombok.NonNull" />
<item index="10" class="java.lang.String" itemvalue="org.springframework.lang.NonNull" />
</list>
</value>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />
</component> </component>

View File

@ -14,4 +14,5 @@ public class BloodSysLogConstants {
public static final String LOG_TYPE_ACCEPT_SAMPLE_INFO = "标本接收"; public static final String LOG_TYPE_ACCEPT_SAMPLE_INFO = "标本接收";
public static final String LOG_TYPE_SEND_SAMPLE_INFO = "标本送检"; public static final String LOG_TYPE_SEND_SAMPLE_INFO = "标本送检";
public static final String LOG_TYPE_CHECK_BLOOD_TYPE = "血型复核"; public static final String LOG_TYPE_CHECK_BLOOD_TYPE = "血型复核";
public static final String LOG_TYPE_MATCH_BLOOD = "交叉配血";
} }

View File

@ -1,10 +1,11 @@
package com.czblood.bus.mapper; package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkBloodInfo; import com.czblood.bus.pojo.XkBloodInfo;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
public interface XkBloodInfoMapper { public interface XkBloodInfoMapper {
XkBloodInfo queryOne(String bloodNo,String productNo); XkBloodInfo queryOne(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
List<XkBloodInfo> queryListByBloodNo(String bloodNo); List<XkBloodInfo> queryListByBloodNo(String bloodNo);
} }

View File

@ -1,10 +1,11 @@
package com.czblood.bus.mapper; package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkInstorageDetail; import com.czblood.bus.pojo.XkInstorageDetail;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
public interface XkInstorageDetailMapper { public interface XkInstorageDetailMapper {
List<XkInstorageDetail> queryByBillNo(String bill_no); List<XkInstorageDetail> queryByBillNo(String bill_no);
List<XkInstorageDetail> queryByBloodNo(String blood_no,String product_no); List<XkInstorageDetail> queryByBloodNo(@Param("blood_no") String blood_no, @Param("product_no") String product_no);
} }

View File

@ -1,6 +1,7 @@
package com.czblood.bus.mapper; package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkMatchDetail; import com.czblood.bus.pojo.XkMatchDetail;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@ -9,4 +10,5 @@ public interface XkMatchDetailMapper {
List<XkMatchDetail> queryListByBillNo(String bill_no); List<XkMatchDetail> queryListByBillNo(String bill_no);
void update(XkMatchDetail xkMatchDetail); void update(XkMatchDetail xkMatchDetail);
void deleteByBillNo(String bill_no); void deleteByBillNo(String bill_no);
List<XkMatchDetail> queryListByBloodNo(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
} }

View File

@ -0,0 +1,9 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkOutDetail;
import java.util.List;
public interface XkOutDetailMapper {
List<XkOutDetail> queryListByBillNo(String billNo);
}

View File

@ -49,7 +49,7 @@ public class XkBloodInfo {
private String blood_bag_no; private String blood_bag_no;
@ApiModelProperty("血袋生成批号") @ApiModelProperty("血袋生成批号")
private String blood_bag_batch; private String blood_bag_batch;
@ApiModelProperty("血液状态") @ApiModelProperty("血液状态,1.在库,4.出库")
private String blood_status; private String blood_status;
@ApiModelProperty("特殊处理") @ApiModelProperty("特殊处理")
private String special_deal; private String special_deal;

View File

@ -48,6 +48,8 @@ public class XkMatchDetail {
@ApiModelProperty("延迟标志") @ApiModelProperty("延迟标志")
private Integer delay_sign; private Integer delay_sign;
private String product_no; private String product_no;
@ApiModelProperty("血液存放位子")
private String position_blood; private String position_blood;
@ApiModelProperty("标本存放位子")
private String position_barcode; private String position_barcode;
} }

View File

@ -0,0 +1,29 @@
package com.czblood.bus.pojo;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("血液出库明细表")
public class XkOutDetail {
private String bill_no;
private Integer sid;
private String blood_no;
private BigDecimal price;
private String special_deal;
private String have_reaction;
private String finish_sign;
private String accept_flag;
private String exp1;
private String exp2;
private String exp3;
private String remark;
private String accept_dept;
private String product_no;
}

View File

@ -72,4 +72,7 @@
<select id="queryListByBillNo" resultType="com.czblood.bus.pojo.XkMatchDetail"> <select id="queryListByBillNo" resultType="com.czblood.bus.pojo.XkMatchDetail">
select * from xk_match_detail where bill_no = #{bill_no} select * from xk_match_detail where bill_no = #{bill_no}
</select> </select>
<select id="queryListByBloodNo" resultType="com.czblood.bus.pojo.XkMatchDetail">
select * from xk_match_detail where blood_no = #{bloodNo} and product_no = #{productNo}
</select>
</mapper> </mapper>

View File

@ -0,0 +1,8 @@
<?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.XkOutDetailMapper">
<select id="queryListByBillNo" resultType="com.czblood.bus.pojo.XkOutDetail">
select * from xk_out_detail where bill_no = #{billNo}
</select>
</mapper>

View File

@ -0,0 +1,28 @@
package com.czblood.busBloodbank.controller;
import com.czblood.busBloodbank.service.BloodOutService;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@Api(tags = "血液出库")
@RestController
@RequestMapping("/bus/bloodbank/bloodOut")
public class BloodOutController {
@Resource
private BloodOutService bloodOutService;
@ApiOperation("查询发血数据")
@GetMapping("/queryOne")
public Result queryOne(String applyNo){
return bloodOutService.queryOne(applyNo);
}
}

View File

@ -1,15 +1,17 @@
package com.czblood.busBloodbank.controller; package com.czblood.busBloodbank.controller;
import com.czblood.bus.constants.BloodSysLogConstants;
import com.czblood.busBloodbank.pojo.VO.MatchBloodListQueryVO;
import com.czblood.busBloodbank.pojo.VO.MatchBloodStockQueryVO;
import com.czblood.busBloodbank.pojo.VO.MatchBloodVO; import com.czblood.busBloodbank.pojo.VO.MatchBloodVO;
import com.czblood.busBloodbank.service.MatchBloodService; import com.czblood.busBloodbank.service.MatchBloodService;
import com.czblood.common.annotation.Log;
import com.czblood.common.core.controller.BaseController; import com.czblood.common.core.controller.BaseController;
import com.czblood.common.core.domain.Result; import com.czblood.common.core.domain.Result;
import com.czblood.common.enums.BusinessType;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -47,24 +49,51 @@ public class MatchBloodController extends BaseController {
} }
@ApiOperation("取消血液配血") @ApiOperation("取消血液配血")
@PostMapping("/cancelBloodInfoMatch") @GetMapping("/cancelBloodInfoMatch")
public Result cancelBloodInfoMatch(String bloodNo,String productNo){ public Result cancelBloodInfoMatch(String bloodNo,String productNo){
return matchBloodService.cancelBloodInfoMatch(bloodNo, productNo); return matchBloodService.cancelBloodInfoMatch(bloodNo, productNo);
} }
@Log(title = BloodSysLogConstants.LOG_TYPE_MATCH_BLOOD, businessType = BusinessType.INSERT)
@ApiOperation("保存数据") @ApiOperation("保存数据")
@PostMapping("/saveData") @PostMapping("/saveData")
public Result saveData(MatchBloodVO matchBloodVO){ public Result saveData(@RequestBody MatchBloodVO matchBloodVO){
matchBloodVO.setUserId(getUsername()); matchBloodVO.setUserId(getUsername());
return matchBloodService.saveData(matchBloodVO); return matchBloodService.saveData(matchBloodVO);
} }
@Log(title = BloodSysLogConstants.LOG_TYPE_MATCH_BLOOD, businessType = BusinessType.DELETE)
@ApiOperation("作废配血单") @ApiOperation("作废配血单")
@GetMapping("/deleteBloodInfoMatch") @GetMapping("/deleteBloodInfoMatch")
public Result deleteBloodInfoMatch(String billNo){ public Result deleteBloodInfoMatch(String billNo){
return matchBloodService.deleteBloodInfoMatch(billNo); return matchBloodService.deleteBloodInfoMatch(billNo);
} }
@ApiOperation("查询血液库存")
@GetMapping("/queryBloodStock")
public Result queryBloodStock(MatchBloodStockQueryVO matchBloodStockQueryVO){
return matchBloodService.queryBloodStock(matchBloodStockQueryVO);
}
@ApiOperation("查询检验结果")
@GetMapping("/queryListResult")
public Result queryLisResult(String billNo){
return matchBloodService.queryLisResult(billNo);
}
@ApiOperation("获取交叉配血列表")
@GetMapping("/queryMatchBloodList")
public Result queryMatchBloodList(MatchBloodListQueryVO matchBloodListQueryVO){
return matchBloodService.queryMatchBloodList(matchBloodListQueryVO);
}
@ApiOperation("校验该血液是否已经存在配血数据")
@GetMapping("/checkBloodMatched")
public Result checkBloodMatched(String bloodNo,String productNo,String billNo){
return matchBloodService.checkBloodMatched(bloodNo, productNo, billNo);
}

View File

@ -0,0 +1,5 @@
package com.czblood.busBloodbank.mapper;
public interface BloodOutMapper {
int queryApplyBloodTypeCount(String billNo);
}

View File

@ -1,5 +1,8 @@
package com.czblood.busBloodbank.mapper; package com.czblood.busBloodbank.mapper;
import com.czblood.bus.pojo.XkBloodInfo;
import com.czblood.busBloodbank.pojo.VO.MatchBloodListQueryVO;
import com.czblood.busBloodbank.pojo.VO.MatchBloodStockQueryVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.Date; import java.util.Date;
@ -24,4 +27,8 @@ public interface MatchBloodMapper {
String checkBloodNeedMatch(@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); int queryOutCountThree(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
String queryChargeMainBillNo(String billNo); String queryChargeMainBillNo(String billNo);
List<Map<String,Object>> queryBloodStock(MatchBloodStockQueryVO matchBloodStockQueryVO);
List<Map<String,Object>> querySearchBloodLastMatchDate();
List<Map<String,Object>> queryMatchBloodList(MatchBloodListQueryVO matchBloodListQueryVO);
List<Map<String,Object>> queryBloodMatchOthers(@Param("billNo") String billNo, @Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
} }

View File

@ -0,0 +1,18 @@
package com.czblood.busBloodbank.pojo.VO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MatchBloodListQueryVO {
private String billNo;
private String stime;
private String etime;
private String dept;
private String applyNo;
private String beinhos_id;
private String bloodNo;
}

View File

@ -0,0 +1,13 @@
package com.czblood.busBloodbank.pojo.VO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MatchBloodStockQueryVO {
private String bloodNo;
private String affirmAbo;
}

View File

@ -0,0 +1,7 @@
package com.czblood.busBloodbank.service;
import com.czblood.common.core.domain.Result;
public interface BloodOutService {
Result queryOne(String applyNo);
}

View File

@ -1,5 +1,7 @@
package com.czblood.busBloodbank.service; package com.czblood.busBloodbank.service;
import com.czblood.busBloodbank.pojo.VO.MatchBloodListQueryVO;
import com.czblood.busBloodbank.pojo.VO.MatchBloodStockQueryVO;
import com.czblood.busBloodbank.pojo.VO.MatchBloodVO; import com.czblood.busBloodbank.pojo.VO.MatchBloodVO;
import com.czblood.common.core.domain.Result; import com.czblood.common.core.domain.Result;
@ -10,4 +12,8 @@ public interface MatchBloodService {
Result cancelBloodInfoMatch(String bloodNo, String productNo); Result cancelBloodInfoMatch(String bloodNo, String productNo);
Result saveData(MatchBloodVO matchBloodVO); Result saveData(MatchBloodVO matchBloodVO);
Result deleteBloodInfoMatch(String billNo); Result deleteBloodInfoMatch(String billNo);
Result queryBloodStock(MatchBloodStockQueryVO matchBloodStockQueryVO);
Result queryLisResult(String billNo);
Result queryMatchBloodList(MatchBloodListQueryVO matchBloodListQueryVO);
Result checkBloodMatched(String bloodNo, String productNo, String billNo);
} }

View File

@ -0,0 +1,110 @@
package com.czblood.busBloodbank.service.impl;
import com.czblood.bus.mapper.XkTransfuseApplyMapper;
import com.czblood.bus.pojo.XkTransfuseApply;
import com.czblood.busBloodbank.mapper.BloodOutMapper;
import com.czblood.busBloodbank.service.BloodOutService;
import com.czblood.common.core.domain.Result;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class BloodOutServiceImpl implements BloodOutService {
@Resource
BloodOutMapper bloodOutMapper;
@Resource
XkTransfuseApplyMapper xkTransfuseApplyMapper;
@Override
public Result queryOne(String applyNo) {
XkTransfuseApply xkTransfuseApply = xkTransfuseApplyMapper.queryOne(applyNo);
if(xkTransfuseApply == null) return new Result("-1","该申请单不存在,请检查!");
String operationType = xkTransfuseApply.getOperation_type();
if(operationType.equals("Z")) return new Result("-1","该申请单为自体血申请单,无法在这操作!");
if(!operationType.equals("S")) return new Result("-1","该申请单为输血治疗申请单,无法在这操作!");
String billSort = xkTransfuseApply.getBill_sort();
String billStatus = xkTransfuseApply.getBill_stasus();
switch (billSort){
case "N":
return new Result("-1","该申请单尚未审核,不能进行发血!");
case "A":
if(billStatus.equals("B")) {
return new Result("-1","该申请单尚未复核血型,请先复核血型!");
}else if(billStatus.equals("N")){
return new Result("-1","该申请单未通过审核,不能进行发血操作!");
}else if(billStatus.equals("D")){
return new Result("-1","该申请单已经发血!");
}else if(billStatus.equals("Z")){
return new Result("-1","该申请单已经作废!");
}
return new Result("0","操作成功");
}
//返回数据 TODO
return null;
}
public Result checkBloodValid(XkTransfuseApply xkTransfuseApply){
String billSort = xkTransfuseApply.getBill_sort();
String billStatus = xkTransfuseApply.getBill_stasus();
String billNo = xkTransfuseApply.getBill_no();
switch (billSort){
case "N":
return new Result("-1","该申请单尚未审核,不能进行发血!");
case "A":
switch (billStatus){
case "B":
return new Result("-1","该申请单尚未复核血型,请先复核血型!");
case "N":
return new Result("-1","该申请单未通过审核,不能进行发血操作!");
case "D":
return new Result("-1","该申请单已经发血!");
case "Z":
return new Result("-1","该申请单已经作废!");
}
break;
case "C":
switch (billStatus){
case "Z":
return new Result("-1","该申请单已经作废!");
case "N":
return new Result("-1","该申请单未通过审核,不能进行发血操作!");
case "D":
return new Result("-1","该申请单已经发血!");
}
break;
case "B":
int i = bloodOutMapper.queryApplyBloodTypeCount(billNo);
if(i > 0) {
if(billStatus.equals("F") || billStatus.equals("SF") || billStatus.equals("B")){
return new Result("-1","该申请单有非红细胞类的血液尚未配血,不能发血!");
}
}
switch (billStatus){
case "F":
return new Result("-1","该申请单尚未配血,请先配血!");
case "N":
return new Result("-1","该申请单未通过审核,不能进行发血操作!");
case "SF":
return new Result("-1","该申请单尚未配血,请先配血!");
case "B":
return new Result("-1","该申请单尚未复核血型,请先复核血型!");
case "D":
//TODO 这里还有个函数没写
break;
case "Z":
return new Result("-1","该申请单已经作废!");
case "BD":
return new Result("-1","该申请单为补单,若要按正常流程,请先复核血型、配血后再发血,否则按紧急流程!");
case "W":
return new Result("-1","该申请单已经补录,若要追加发血,请先复核血型、配血后再发血!");
//TODO 这里还有个C,S状态没有写,要看下
}
}
return new Result("0","操作成功");
}
}

View File

@ -1,9 +1,8 @@
package com.czblood.busBloodbank.service.impl; package com.czblood.busBloodbank.service.impl;
import com.czblood.bus.mapper.XkCheckBloodtypeMapper; import cn.hutool.core.date.DateTime;
import com.czblood.bus.mapper.XkMatchMainMapper; import cn.hutool.core.date.DateUtil;
import com.czblood.bus.mapper.XkTransfuseApplyBloodbreedMapper; import com.czblood.bus.mapper.*;
import com.czblood.bus.mapper.XkTransfuseApplyMapper;
import com.czblood.bus.pojo.*; import com.czblood.bus.pojo.*;
import com.czblood.bus.pojo.inter.CancelMatchBloodTypeRequest; import com.czblood.bus.pojo.inter.CancelMatchBloodTypeRequest;
import com.czblood.bus.pojo.inter.MatchBloodTypeRequest; import com.czblood.bus.pojo.inter.MatchBloodTypeRequest;
@ -11,6 +10,8 @@ import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.bus.utils.BloodInterfaceUtil; import com.czblood.bus.utils.BloodInterfaceUtil;
import com.czblood.busBloodbank.mapper.MatchBloodMapper; import com.czblood.busBloodbank.mapper.MatchBloodMapper;
import com.czblood.busBloodbank.pojo.DTO.MatchBloodDTO; import com.czblood.busBloodbank.pojo.DTO.MatchBloodDTO;
import com.czblood.busBloodbank.pojo.VO.MatchBloodListQueryVO;
import com.czblood.busBloodbank.pojo.VO.MatchBloodStockQueryVO;
import com.czblood.busBloodbank.pojo.VO.MatchBloodVO; import com.czblood.busBloodbank.pojo.VO.MatchBloodVO;
import com.czblood.busBloodbank.service.MatchBloodService; import com.czblood.busBloodbank.service.MatchBloodService;
import com.czblood.busBloodbank.utils.MatchBloodUtil; import com.czblood.busBloodbank.utils.MatchBloodUtil;
@ -21,6 +22,7 @@ import javax.annotation.Resource;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
@Service @Service
public class MatchBloodServiceImpl implements MatchBloodService { public class MatchBloodServiceImpl implements MatchBloodService {
@ -39,6 +41,8 @@ public class MatchBloodServiceImpl implements MatchBloodService {
XkCheckBloodtypeMapper xkCheckBloodtypeMapper; XkCheckBloodtypeMapper xkCheckBloodtypeMapper;
@Resource @Resource
XkMatchMainMapper xkMatchMainMapper; XkMatchMainMapper xkMatchMainMapper;
@Resource
XkTransfuseApplyTestitemMapper xkTransfuseApplyTestitemMapper;
@Override @Override
public Result queryWaitInfo() { public Result queryWaitInfo() {
@ -255,4 +259,55 @@ public class MatchBloodServiceImpl implements MatchBloodService {
return new Result("0","作废成功!"); return new Result("0","作废成功!");
} }
@Override
public Result queryBloodStock(MatchBloodStockQueryVO matchBloodStockQueryVO) {
List<Map<String,Object>> xkBloodInfoList = matchBloodMapper.queryBloodStock(matchBloodStockQueryVO);
//配血超过多少天后,在交叉配血,库存浏览中用特殊颜色进行显示
String pxcgts = bloodBankUtil.getParameterValue("PXCGTS");
//标记交叉配血
List<Map<String,Object>> xkMatchDetailList = matchBloodMapper.querySearchBloodLastMatchDate();
for (Map<String, Object> stringObjectMap : xkMatchDetailList) {
String matchDate = BloodBankUtil.isBank(stringObjectMap.get("match_date"));
String bloodNo = BloodBankUtil.isBank(stringObjectMap.get("blood_no"));
String productNo = BloodBankUtil.isBank(stringObjectMap.get("product_no"));
DateTime matchDateDelay = DateUtil.offsetDay(DateUtil.parse(matchDate, "yyyy-MM-dd"), Integer.parseInt(pxcgts));
//match_delay 配血超过预定天数未出库
if(matchDateDelay.compareTo(bloodBankUtil.getCurrentTimeDate()) > 0){
xkBloodInfoList.stream().filter(mapParam ->
BloodBankUtil.isBank(mapParam.get("blood_no")).equals(bloodNo) && BloodBankUtil.isBank(mapParam.get("product_no")).equals(productNo))
.forEach(mapParam -> mapParam.put("match_delay","Y"));
}
}
return new Result("0","查询成功!",xkBloodInfoList);
}
@Override
public Result queryLisResult(String billNo) {
List<XkTransfuseApplyTestitem> xkTransfuseApplyTestitemList = xkTransfuseApplyTestitemMapper.queryList(billNo);
return new Result("0","查询成功!",xkTransfuseApplyTestitemList);
}
@Override
public Result queryMatchBloodList(MatchBloodListQueryVO matchBloodListQueryVO) {
List<Map<String, Object>> mapList = matchBloodMapper.queryMatchBloodList(matchBloodListQueryVO);
return new Result("0","查询成功!",mapList);
}
@Override
public Result checkBloodMatched(String bloodNo, String productNo, String billNo) {
List<Map<String, Object>> mapList = matchBloodMapper.queryBloodMatchOthers(bloodNo, productNo, billNo);
if(!mapList.isEmpty()){
String msg = "检测到该血液存在以下配血记录:\r\n";
for (Map<String, Object> stringObjectMap : mapList) {
String temp = "科室:"+stringObjectMap.get("dept_id")+"患者姓名:"+stringObjectMap.get("patient_name")
+"申请单:"+stringObjectMap.get("apply_no")
+"配血日期:"+stringObjectMap.get("test_date");
msg += temp+"\n";
}
return new Result("2",msg);
}
return new Result("0","校验通过!");
}
} }

View File

@ -0,0 +1,9 @@
package com.czblood.busBloodbank.utils;
import org.springframework.stereotype.Component;
@Component
public class BloodOutUtil {
}

View File

@ -46,11 +46,13 @@ public class MatchBloodUtil {
validDate = DateUtil.offsetDay(bloodBankUtil.getCurrentTimeDate(),-Integer.parseInt(overstepDay)); validDate = DateUtil.offsetDay(bloodBankUtil.getCurrentTimeDate(),-Integer.parseInt(overstepDay));
} }
Date maxPickDate = matchBloodMapper.querySampleMaxDate(applyNo); Date maxPickDate = matchBloodMapper.querySampleMaxDate(applyNo);
if (validDate != null && validDate.compareTo(maxPickDate) > 0) { if (validDate != null && maxPickDate != null) {
//当标本采集时间与发血时间的间隔大于“overstep_day”参数值时,执行本参数定义的操作。‘0’不操作、‘1’提醒、‘2’禁止发血 if(validDate.compareTo(maxPickDate) > 0){
String overstepOperate = bloodBankUtil.getParameterValue("overstep_operate"); //当标本采集时间与发血时间的间隔大于“overstep_day”参数值时,执行本参数定义的操作。‘0’不操作、‘1’提醒、‘2’禁止发血
if (overstepOperate.equals("1")) return new Result("1", "请注意,标本时间已经超过了设定的有效天数"); String overstepOperate = bloodBankUtil.getParameterValue("overstep_operate");
if (overstepOperate.equals("2")) return new Result("-1", "标本时间已经超过了设定的有效天数,不可以继续操作!"); if (overstepOperate.equals("1")) return new Result("1", "请注意,标本时间已经超过了设定的有效天数");
if (overstepOperate.equals("2")) return new Result("-1", "标本时间已经超过了设定的有效天数,不可以继续操作!");
}
} }
return new Result("0","校验通过!"); return new Result("0","校验通过!");
} }
@ -92,10 +94,12 @@ public class MatchBloodUtil {
XkBloodInfo xkBloodInfo = bloodBankUtil.queryBloodInfoOne(bloodNo, productNo); XkBloodInfo xkBloodInfo = bloodBankUtil.queryBloodInfoOne(bloodNo, productNo);
List<XkInstorageDetail> xkInstorageDetailList = xkInstorageDetailMapper.queryByBloodNo(bloodNo, productNo); List<XkInstorageDetail> xkInstorageDetailList = xkInstorageDetailMapper.queryByBloodNo(bloodNo, productNo);
if(xkInstorageDetailList.size() > 0){ if(xkInstorageDetailList.size() > 0){
String checkAbo = xkInstorageDetailList.get(0).getCheck_abo(); String checkAbo = BloodBankUtil.isBank(xkInstorageDetailList.get(0).getCheck_abo());
String checkRh = xkInstorageDetailList.get(0).getCheck_rh(); String checkRh = BloodBankUtil.isBank(xkInstorageDetailList.get(0).getCheck_rh());
if(!checkAbo.equals(xkBloodInfo.getBlood_type()) || !checkRh.equals(xkBloodInfo.getRh_blood_type())){ if(!checkAbo.equals("") && !checkRh.equals("")){
return new Result("-1","该血液流水号:"+bloodNo+"产品码:"+productNo+"的Abo型或Rh型与入库时的不一致!"); if(!checkAbo.equals(xkBloodInfo.getBlood_type()) || !checkRh.equals(xkBloodInfo.getRh_blood_type())){
return new Result("-1","该血液流水号:"+bloodNo+"产品码:"+productNo+"的Abo型或Rh型与入库时的不一致!");
}
} }
} }
return new Result("0","校验通过!"); return new Result("0","校验通过!");

View File

@ -0,0 +1,8 @@
<?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.BloodOutMapper">
<select id="queryApplyBloodTypeCount" resultType="java.lang.Integer">
SELECT COUNT(1) FROM xk_transfuse_apply_bloodbreed A JOIN xk_blood_breed B ON B.breed_code=A.blood_breed AND B.Is_match='N' WHERE A.bill_no=#{billNo} and b.blood_kind = '0002'
</select>
</mapper>

View File

@ -60,6 +60,7 @@
xk_transfuse_apply.beinhos_id, xk_transfuse_apply.beinhos_id,
xk_transfuse_apply.dept_id, xk_transfuse_apply.dept_id,
xk_transfuse_apply.patient_bed, xk_transfuse_apply.patient_bed,
xk_transfuse_apply.bill_stasus,
xk_transfuse_apply_bloodbreed.blood_breed, xk_transfuse_apply_bloodbreed.blood_breed,
xk_transfuse_apply_bloodbreed.blood_num, xk_transfuse_apply_bloodbreed.blood_num,
xk_transfuse_apply_bloodbreed.unit, xk_transfuse_apply_bloodbreed.unit,
@ -110,7 +111,7 @@
xk_backout_detail.product_no = #{productNo} xk_backout_detail.product_no = #{productNo}
</select> </select>
<select id="queryBloodOutHosCount" resultType="java.lang.Integer"> <select id="queryBloodOutHosCount" resultType="java.lang.Integer">
SELECT count(*) into :ll_count_bloodout_hos FROM xk_bloodout_hos_main,dbo.xk_bloodout_hos_detail SELECT count(*) FROM xk_bloodout_hos_main,dbo.xk_bloodout_hos_detail
WHERE xk_bloodout_hos_main.Bill_No = xk_bloodout_hos_detail.Bill_No WHERE xk_bloodout_hos_main.Bill_No = xk_bloodout_hos_detail.Bill_No
AND xk_bloodout_hos_main.Audit_Flag = 'Y' AND xk_bloodout_hos_main.Audit_Flag = 'Y'
AND xk_bloodout_hos_detail.Blood_No = #{bloodNo} AND xk_bloodout_hos_detail.Blood_No = #{bloodNo}
@ -161,4 +162,73 @@
SELECT xk_charge_main.bill_no FROM xk_charge_main SELECT xk_charge_main.bill_no FROM xk_charge_main
Where xk_charge_main.relative_billno = #{billNo} AND send_flag ='N' Where xk_charge_main.relative_billno = #{billNo} AND send_flag ='N'
</select> </select>
<select id="queryBloodStock" resultType="java.util.Map">
SELECT xk_blood_info.blood_no,
xk_blood_info.product_no,
xk_blood_info.blood_breed,
xk_blood_info.blood_type,
xk_blood_info.rh_blood_type,
xk_blood_info.capacity,
xk_blood_info.unit,
xk_blood_info.valid_date,
xk_blood_info.blood_status ,
xk_blood_info.auto_no,
case when xk_match_detail.match_date is null then 'N' else 'Y' end as matched,
space(4) as match_delay,
space(4) as choose
FROM xk_blood_info
left join xk_match_detail on (xk_blood_info.blood_no = xk_match_detail.blood_no and xk_match_detail.product_no = xk_blood_info.product_no)
WHERE ( xk_blood_info.blood_status = '1' ) AND
( xk_blood_info.blood_sort In ('C','W') OR ISNULL(xk_blood_info.blood_sort,'') = '')
<if test="bloodNo != null and bloodNo!= ''">AND xk_blood_info.blood_no = #{bloodNo}</if>
</select>
<select id="querySearchBloodLastMatchDate" resultType="java.util.Map">
SELECT
xk_match_detail.blood_no,
xk_match_detail.product_no,
xk_match_detail.match_date,
xk_match_detail.delay_day
FROM xk_match_detail,
xk_match_main,
xk_blood_info
WHERE ( xk_match_detail.bill_no = xk_match_main.bill_no ) and
( xk_match_detail.blood_no = xk_blood_info.blood_no ) and
<![CDATA[ ( xk_match_main.bill_status <> 'ZF' ) AND ]]>
( xk_blood_info.blood_status = '1' )
ORDER BY xk_match_detail.match_date DESC
</select>
<select id="queryMatchBloodList" resultType="java.util.Map">
SELECT xk_match_main.bill_no,
xk_match_main.apply_no,
xk_check_bloodtype.affirm_abo,
xk_check_bloodtype.check_rh,
xk_match_main.test_date,
xk_match_main.patient_name,
xk_match_main.dept_id,
xk_match_main.bill_status
FROM xk_match_main,xk_check_bloodtype
WHERE (xk_match_main.test_date between #{stime} AND #{etime}) AND
<if test="billNo != null">(xk_match_main.bill_no = #{billNo}) AND</if>
( xk_match_main.apply_no NOT in(select xk_match_apply.apply_no from xk_match_apply) )AND
( xk_match_main.check_no = xk_check_bloodtype.bill_no) AND
<if test="applyNo != null">(xk_match_main.apply_no = #{applyNo}) and</if>
<if test="beinhos_id != null">(xk_match_main.beinhos_id like '%'+#{beinhos_id}+'%' ) and</if>
( xk_check_bloodtype.bill_sort = 'C' Or Isnull(xk_check_bloodtype.bill_sort,'') = '') AND
<if test="dept != null">(xk_match_main.dept_id = #{dept} Or xk_match_main.dept_id = #{dept} or isnull(xk_match_main.dept_id,'') = '')</if>
</select>
<select id="queryBloodMatchOthers" resultType="java.util.Map">
SELECT xk_match_main.patient_name,
xk_match_main.dept_id,
xk_match_main.apply_no,
xk_match_main.test_date
FROM xk_match_detail,
xk_match_main
WHERE ( xk_match_detail.bill_no = xk_match_main.bill_no ) and
<![CDATA[( ( xk_match_main.bill_status <> 'ZF' ) AND ]]>
<![CDATA[( xk_match_detail.bill_no <> #{billNo} ) AND ]]>
( xk_match_detail.blood_no = #{bloodNo} ) AND
( xk_match_detail.product_no = #{productNo} ))
</select>
</mapper> </mapper>

View File

@ -356,6 +356,14 @@ if not exists(select 1 from dbo.xk_dmzd where wordbook_sign = 'BASE')
('sampleStatus','4','已签收','Y'), ('sampleStatus','4','已签收','Y'),
('sampleStatus','5','复核血型','Y') ('sampleStatus','5','复核血型','Y')
insert into xk_dmzd(wordbook_sign,wordbook_code,wordbook_name,use_sign) values('BASE','zccc','交叉配血主侧','Y')
insert into xk_dmzd(wordbook_sign,wordbook_code,wordbook_name,use_sign) values
('zccc','N','不凝集,不溶血','Y'),
('zccc','Y','凝集','Y'),
('zccc','R','溶血','Y'),
('zccc','C','血液中心配血','Y'),
('zccc','W','未做','Y')
END END
if not exists(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'xk_transfuse_apply_before' AND COLUMN_NAME = 'bill_status') if not exists(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'xk_transfuse_apply_before' AND COLUMN_NAME = 'bill_status')