From 197783494082719de6c1aafd5717c1910a5c69de Mon Sep 17 00:00:00 2001 From: jiangs <373297395@qq.com> Date: Fri, 31 Jul 2026 18:08:14 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=80=E5=9E=8B=E5=A4=8D=E6=A0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constants/BloodApplyStatusConstants.java | 3 + .../BloodInterfaceTypeConstants.java | 4 + .../bus/pojo/inter/CheckBloodTypeRequest.java | 21 ++++ .../resources/mapper/XkSampleInfoMapper.xml | 6 +- .../controller/CheckBloodTypeController.java | 42 ++++++++ .../mapper/CheckBloodTypeMapper.java | 10 ++ .../pojo/DTO/CheckBloodTypeDTO.java | 17 +++ .../service/CheckBloodTypeService.java | 10 ++ .../impl/CheckBloodTypeServiceImpl.java | 101 ++++++++++++++++++ .../utils/CheckBloodTypeUtil.java | 65 +++++++++++ .../resources/mapper/CheckBloodTypeMapper.xml | 65 +++++++++++ sql/updatedb_blood.sql | 12 +++ 12 files changed, 353 insertions(+), 3 deletions(-) create mode 100644 blood_bus/src/main/java/com/czblood/bus/pojo/inter/CheckBloodTypeRequest.java create mode 100644 blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/controller/CheckBloodTypeController.java create mode 100644 blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/mapper/CheckBloodTypeMapper.java create mode 100644 blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/pojo/DTO/CheckBloodTypeDTO.java create mode 100644 blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/CheckBloodTypeService.java create mode 100644 blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/CheckBloodTypeServiceImpl.java create mode 100644 blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/utils/CheckBloodTypeUtil.java create mode 100644 blood_bus_bloodbank/src/main/resources/mapper/CheckBloodTypeMapper.xml diff --git a/blood_bus/src/main/java/com/czblood/bus/constants/BloodApplyStatusConstants.java b/blood_bus/src/main/java/com/czblood/bus/constants/BloodApplyStatusConstants.java index 9ea8d85..68d5390 100644 --- a/blood_bus/src/main/java/com/czblood/bus/constants/BloodApplyStatusConstants.java +++ b/blood_bus/src/main/java/com/czblood/bus/constants/BloodApplyStatusConstants.java @@ -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 = "上级医生审核"; diff --git a/blood_bus/src/main/java/com/czblood/bus/constants/BloodInterfaceTypeConstants.java b/blood_bus/src/main/java/com/czblood/bus/constants/BloodInterfaceTypeConstants.java index b8eedfc..9802bfa 100644 --- a/blood_bus/src/main/java/com/czblood/bus/constants/BloodInterfaceTypeConstants.java +++ b/blood_bus/src/main/java/com/czblood/bus/constants/BloodInterfaceTypeConstants.java @@ -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"; } diff --git a/blood_bus/src/main/java/com/czblood/bus/pojo/inter/CheckBloodTypeRequest.java b/blood_bus/src/main/java/com/czblood/bus/pojo/inter/CheckBloodTypeRequest.java new file mode 100644 index 0000000..bc1c2f5 --- /dev/null +++ b/blood_bus/src/main/java/com/czblood/bus/pojo/inter/CheckBloodTypeRequest.java @@ -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); + } +} diff --git a/blood_bus/src/main/resources/mapper/XkSampleInfoMapper.xml b/blood_bus/src/main/resources/mapper/XkSampleInfoMapper.xml index ddd3050..c6415e2 100644 --- a/blood_bus/src/main/resources/mapper/XkSampleInfoMapper.xml +++ b/blood_bus/src/main/resources/mapper/XkSampleInfoMapper.xml @@ -86,10 +86,10 @@ senddate = #{senddate}, sendperson = #{sendperson}, createtime = #{createtime}, - Sample_No = #{sample_no} - where Sample_No = #{sample_no} + Sample_No = #{sample_No} + where Sample_No = #{sample_No} \ No newline at end of file diff --git a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/controller/CheckBloodTypeController.java b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/controller/CheckBloodTypeController.java new file mode 100644 index 0000000..8799a5d --- /dev/null +++ b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/controller/CheckBloodTypeController.java @@ -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); + } + + + +} + + diff --git a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/mapper/CheckBloodTypeMapper.java b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/mapper/CheckBloodTypeMapper.java new file mode 100644 index 0000000..cc7c9eb --- /dev/null +++ b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/mapper/CheckBloodTypeMapper.java @@ -0,0 +1,10 @@ +package com.czblood.busBloodbank.mapper; + +import java.util.List; +import java.util.Map; + +public interface CheckBloodTypeMapper { + List> queryWaitInfo(String bbjszhxxfh); + int checkMatchedBloodNotOut(String billNo); + List> queryOne(String billNo); +} diff --git a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/pojo/DTO/CheckBloodTypeDTO.java b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/pojo/DTO/CheckBloodTypeDTO.java new file mode 100644 index 0000000..d3328a5 --- /dev/null +++ b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/pojo/DTO/CheckBloodTypeDTO.java @@ -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> patientInfoList; + private List xkTransfuseApplyBloodbreedList; +} diff --git a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/CheckBloodTypeService.java b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/CheckBloodTypeService.java new file mode 100644 index 0000000..c115433 --- /dev/null +++ b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/CheckBloodTypeService.java @@ -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); +} diff --git a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/CheckBloodTypeServiceImpl.java b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/CheckBloodTypeServiceImpl.java new file mode 100644 index 0000000..297f6fc --- /dev/null +++ b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/CheckBloodTypeServiceImpl.java @@ -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> 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> mapList = checkBloodTypeMapper.queryOne(billNo); + List 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 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); + } +} diff --git a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/utils/CheckBloodTypeUtil.java b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/utils/CheckBloodTypeUtil.java new file mode 100644 index 0000000..f45100b --- /dev/null +++ b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/utils/CheckBloodTypeUtil.java @@ -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); + } +} diff --git a/blood_bus_bloodbank/src/main/resources/mapper/CheckBloodTypeMapper.xml b/blood_bus_bloodbank/src/main/resources/mapper/CheckBloodTypeMapper.xml new file mode 100644 index 0000000..f28abde --- /dev/null +++ b/blood_bus_bloodbank/src/main/resources/mapper/CheckBloodTypeMapper.xml @@ -0,0 +1,65 @@ + + + + + + + + \ No newline at end of file diff --git a/sql/updatedb_blood.sql b/sql/updatedb_blood.sql index 3b7dd37..1581018 100644 --- a/sql/updatedb_blood.sql +++ b/sql/updatedb_blood.sql @@ -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 \ No newline at end of file