输血申请单,保存逻辑,登录单独校验功能

This commit is contained in:
jiangs 2026-07-01 09:15:39 +08:00
parent 951365061a
commit f51041a4d8
31 changed files with 1019 additions and 43 deletions

View File

@ -20,4 +20,8 @@ public class BloodInterfaceTypeConstants {
* 输血前评估
*/
public static final String BEFORE_ASSESS = "BEFORE_ASSESS";
/**
* 使用his接口验证密码
*/
public static final String HIS_USE_PASSWORD = "HIS_USE_PASSWORD";
}

View File

@ -1,15 +1,17 @@
package com.czblood.bus.controller;
import com.czblood.bus.mapper.XkProTransfuseProjectMapper;
import com.czblood.bus.mapper.XkTransfuseApplyMapper;
import com.czblood.bus.mapper.XkXtwhIllDiagnoseMapper;
import com.czblood.bus.pojo.XkBloodBreed;
import com.czblood.bus.pojo.XkDmzd;
import com.czblood.bus.pojo.XkProTransfuseProject;
import com.czblood.bus.pojo.XkXtwhIllDiagnose;
import com.czblood.bus.pojo.*;
import com.czblood.bus.pojo.inter.HisUsePasswordRequest;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.bus.utils.BloodInterfaceUtil;
import com.czblood.common.core.controller.BaseController;
import com.czblood.common.core.domain.Result;
import com.czblood.common.core.domain.entity.SysUser;
import com.czblood.common.core.page.TableDataInfo;
import com.czblood.common.utils.SecurityUtils;
import com.czblood.system.util.CommonUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -81,4 +83,35 @@ public class BloodCommonController extends BaseController {
return getDataTable(xkXtwhIllDiagnoseList);
}
/**
* 校验用户名和密码是否成功
* @return
*/
@ApiOperation("校验用户名和密码是否成功")
@GetMapping("/checkLoginAffirm")
public Result checkLoginAffirm(String userId,String password){
String hisUsedpass = bloodBankUtil.getParameterValue("HIS_usedpass");
if(hisUsedpass.equals("Y")){
//使用his接口验证密码
HisUsePasswordRequest hisUsePasswordRequest = new HisUsePasswordRequest();
hisUsePasswordRequest.setUserId(userId);
hisUsePasswordRequest.setPassword(password);
Result result = BloodInterfaceUtil.invokeBloodInterface(hisUsePasswordRequest);
if(!result.getCode().equals("0")) return result;
}else{
//使用本地密码校验
SysUser userInfo = bloodBankUtil.getUserInfo(userId);
boolean match = SecurityUtils.matchesPassword(password, userInfo.getPassword());
if(!match) return new Result("1","密码错误!");
}
return new Result("0","校验成功!");
}
// @ApiOperation("测试接口")
// @GetMapping("/test01")
// public Result test01(String billNo){
// XkTransfuseApply xkTransfuseApply = xkTransfuseApplyMapper.queryOne(billNo);
// return new Result("0","查询成功!",xkTransfuseApply);
// }
}

View File

@ -0,0 +1,9 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkCausalisSet;
import java.util.List;
public interface XkCausalisSetMapper {
List<XkCausalisSet> queryList(XkCausalisSet xkCausalisSet);
}

View File

@ -0,0 +1,9 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkCheckBloodtype;
import java.util.List;
public interface XkCheckBloodtypeMapper {
List<XkCheckBloodtype> queryList(XkCheckBloodtype xkCheckBloodtype);
}

View File

@ -6,4 +6,7 @@ import java.util.List;
public interface XkTransfuseApplyCausalisMapper {
List<XkTransfuseApplyCausalis> queryList(XkTransfuseApplyCausalis xkTransfuseApplyCausalis);
List<XkTransfuseApplyCausalis> queryListByBillNo(String billNo);
void deleteByBillNo(String billNo);
void insert(XkTransfuseApplyCausalis xkTransfuseApplyCausalis);
}

View File

@ -0,0 +1,45 @@
package com.czblood.bus.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("输血指征设置")
public class XkCausalisSet {
@ApiModelProperty("输血指征代码")
private String Causalis_Code;
@ApiModelProperty("科室类型,A手术科室,B非手术科室")
private String Dept_Type;
@ApiModelProperty("判断方式,N人工判断,Y系统判断,W待定")
private String Causalis_Type;
@ApiModelProperty("血液品种")
private String Blood_Breed;
@ApiModelProperty("检验项目名称")
private String Pro_Name;
@ApiModelProperty("检验结果值1")
private String Test_Value;
@ApiModelProperty("比较表达式,>,<,≥,≤,between")
private String Result_Expression;
@ApiModelProperty("输血指征名称")
private String Causalis_Name;
@ApiModelProperty("输血合理性标志,Y合理,N不合理")
private String Causalis_Result;
@ApiModelProperty("使用标志,Y使用,N不使用")
private String Use_Sign;
@ApiModelProperty("排序")
private Integer Sequence;
private Date Last_Modified;
@ApiModelProperty("类别,对应字典当中的operatype,nooperatype")
private String Use_Type;
@ApiModelProperty("补充说明")
private String Explain;
@ApiModelProperty("检验结果值2")
private String Test_Value2;
}

View File

@ -0,0 +1,40 @@
package com.czblood.bus.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class XkCheckBloodtype {
private String bill_no;
private String apply_no;
private String beinhos_id;
private String patient_name;
private String dept_id;
private String check_abo;
private String check_fabo;
private String affirm_abo;
private String check_rh;
private String antibody1;
private String antibody2;
private String antibody3;
private String affirm_antibody;
private String proteid_test;
private String test_person;
private Date test_date;
private String check_person;
private String input_person;
private Date input_date;
private String sample_id;
private String need_match;
private String bill_sort;
private String bill_status;
private String remark;
private String Sub_Blood;
private String bz1;
private String hos_id;
}

View File

@ -31,4 +31,5 @@ public class XkDmzd {
private String use_sign;
private Date last_modified;
private String exp5;
private String wordbook_code_old;
}

View File

@ -53,4 +53,6 @@ public class XkPatientInfo {
private Date last_modified;
@ApiModelProperty("住院次数")
private String times;
@ApiModelProperty("病人唯一ID")
private String beinhos_number;
}

View File

@ -27,35 +27,54 @@ public class XkTransfuseApply {
@ApiModelProperty("床号")
private String patient_bed;
private String casehistory_id;
@ApiModelProperty("输血史")
private String transfuse_history;
@ApiModelProperty("输血反应史")
private String reaction_history;
@ApiModelProperty("妊娠史")
private String gestation_history;
@ApiModelProperty("分娩史")
private String parturition_history;
@ApiModelProperty("移植配型史")
private String match_history;
@ApiModelProperty("器官移植史")
private String transplant_history;
private String dept_id;
@ApiModelProperty("申请时间")
private Date apply_date;
private String send_person;
@ApiModelProperty("收费标志")
private String charge_sign;
@ApiModelProperty("输入人")
private String input_person;
@ApiModelProperty("接收时间")
private Date receive_date;
@ApiModelProperty("主治医师")
private String attending_medic;
@ApiModelProperty("上级医师")
private String treat_medic;
@ApiModelProperty("输血指征")
private String causalis;
@ApiModelProperty("输血科主任")
private String bank_director;
@ApiModelProperty("医务部负责人")
private String medical_affairs;
@ApiModelProperty("对应的条码ID")
private String sample_id;
@ApiModelProperty("采集时间")
private Date gather_date;
@ApiModelProperty("ABO血型")
private String abo_type;
@ApiModelProperty("RH血型")
private String rh_type;
@ApiModelProperty("审核标志")
private String check_sign;
@ApiModelProperty("审核意见")
private String check_explain;
@ApiModelProperty("状态")
@ApiModelProperty("状态(A=未审核、B=已审核、C=已配血、D=已发血、Z=作废、BD=未补录、W=已补录、F=已复核血型、S=已追加配血、N=审核未通过)")
private String bill_stasus;
private String bill_type;
@ApiModelProperty("申请医生")
private String apply_medic;
@ApiModelProperty("诊断")
private String diagnoses;
@ -63,42 +82,70 @@ public class XkTransfuseApply {
private String intent;
@ApiModelProperty("申请单类型")
private String apply_type;
@ApiModelProperty("第一次输血时间")
private Date use1_date;
@ApiModelProperty("第二次输血时间")
private Date use2_date;
@ApiModelProperty("第三次输血时间")
private Date use3_date;
private String remark;
@ApiModelProperty("预约入库标志(N=否、Y=是)")
private String is_plan;
@ApiModelProperty("申请单状态类型")
@ApiModelProperty("单据类别(A,B,C,D,J)")
private String bill_sort;
@ApiModelProperty("是否有标本申请")
private String sample_sign;
@ApiModelProperty("输入科室")
private String input_dept;
@ApiModelProperty("上级医师审核标志")
private String send_able;
@ApiModelProperty("上级医师审核时间")
private Date medic_check_date;
@ApiModelProperty("审核医生")
private String check_medic;
@ApiModelProperty("是否大量用血(N=否、Y=是)")
private String is_large_use;
@ApiModelProperty("操作类型(C输血申请,Z自体血申请单,S为输血治疗单)")
private String operation_type;
@ApiModelProperty("血型复核结果与申请单的血型不一致继续配血标志(N=否、Y=是)")
private String bloodcheck_abnor;
@ApiModelProperty("当血型复核结果与申请单的血型不一致时,输血申请单是否可以继续进行下一步的流程操作,Y表示可以,N表示不可以")
private String abnor_next;
@ApiModelProperty("是否同意配血(N=否、Y=是)")
private String agreement_ink;
private String exp1;
private String exp2;
private String exp3;
private String exp4;
@ApiModelProperty("最后修改时间")
private Date last_modified;
@ApiModelProperty("通知标志")
private String notify_sign;
@ApiModelProperty("联系手机")
private String adm_no;
private BigDecimal Use1_Num;
private BigDecimal Use2_Num;
private BigDecimal Use3_Num;
@ApiModelProperty("科室类型(A手术科室,B非手术科室)")
private String Dept_Type;
private String use_type;
@ApiModelProperty("单病种")
private String Ill_Code;
@ApiModelProperty("手术名称")
private String Ops_Name;
private String isemergency;
@ApiModelProperty("是否合理(不合理N,待定W,合理Y)")
private String Valid_Flag;
@ApiModelProperty("通知消息确认标志(N=否、Y=是)")
private String notice_yn;
@ApiModelProperty("his系统申请单号")
private String his_SerialNo;
@ApiModelProperty("输血评估单")
private String assess_bill_no;
@ApiModelProperty("手术名称")
private String operation_name;
@ApiModelProperty("手术级别")
private String operation_level;
@ApiModelProperty("身份证号")
private String card_no;
}

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 HisUsePasswordRequest implements BloodInterfaceType {
private final String method = BloodInterfaceTypeConstants.HIS_USE_PASSWORD;
private String userId;
private String password;
@Override
public String serializationJson() {
return JSONUtil.toJsonStr(this);
}
}

View File

@ -0,0 +1,76 @@
package com.czblood.bus.system;
import com.czblood.bus.mapper.XkDmzdMapper;
import com.czblood.bus.pojo.XkDmzd;
import com.czblood.common.core.domain.entity.SysDept;
import com.czblood.system.mapper.SysDeptMapper;
import com.czblood.system.service.impl.SysDeptServiceImpl;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
@Primary
public class BloodSysDeptServiceImpl extends SysDeptServiceImpl {
@Resource
XkDmzdMapper xkDmzdMapper;
@Resource
SysDeptMapper sysDeptMapper;
@Override
public int insertDept(SysDept dept) {
int i = super.insertDept(dept);
if(i <= 0) return i;
//兼容逻辑,向输血系统字典表中增加科室信息
XkDmzd xkDmzd = new XkDmzd();
xkDmzd.setWordbook_sign("ks");
xkDmzd.setWordbook_code(dept.getDeptCode());
xkDmzd.setWordbook_name(dept.getDeptName());
xkDmzd.setUse_sign("Y");
xkDmzdMapper.insertXkDmzd(xkDmzd);
return 1;
}
/**
* 修改保存部门信息
*
* @param dept 部门信息
* @return 结果
*/
@Override
public int updateDept(SysDept dept) {
int i = super.updateDept(dept);
if(i <= 0) return i;
//兼容逻辑,向输血系统字典表中更新科室信息
XkDmzd xkDmzd = new XkDmzd();
xkDmzd.setWordbook_sign("ks");
xkDmzd.setWordbook_code(dept.getDeptCode());
xkDmzd.setWordbook_name(dept.getDeptName());
xkDmzd.setWordbook_code_old(dept.getDeptCodeOld());
xkDmzd.setUse_sign(dept.getStatus().equals("0")?"Y":"N");
xkDmzdMapper.updateXkDmzd(xkDmzd);
return 1;
}
@Override
public int deleteDeptById(Long deptId) {
int i = super.deleteDeptById(deptId);
if(i <= 0) return i;
//兼容逻辑,向输血系统字典表中删除科室信息
SysDept sysDept = sysDeptMapper.selectDeptById(deptId);
if (sysDept == null) return i;
XkDmzd xkDmzd = new XkDmzd();
xkDmzd.setWordbook_sign("ks");
xkDmzd.setWordbook_code(sysDept.getDeptCode());
xkDmzd.setWordbook_sign(sysDept.getDelFlag().equals("0")?"Y":"N");
xkDmzdMapper.updateXkDmzd(xkDmzd);
return 1;
}
}

View File

@ -12,6 +12,8 @@ import com.czblood.bus.pojo.XkBloodBreed;
import com.czblood.bus.pojo.XkDmzd;
import com.czblood.bus.pojo.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;
import org.springframework.data.redis.connection.ReactiveSubscription;
import org.springframework.stereotype.Component;
@ -36,6 +38,8 @@ public class BloodBankUtil {
CommonUtil commonUtil;
@Resource
XkBloodBreedMapper xkBloodBreedMapper;
@Resource
SysUserMapper sysUserMapper;
/**
@ -94,9 +98,10 @@ public class BloodBankUtil {
XkParameter parameterCache = OptionCache.getOptCache(parameterCode);
if(parameterCache == null){
XkParameter xkParameter = xkParameterMapper.queryOne(parameterCode);
return xkParameter.getParameter_value();
if(xkParameter == null) return "";
return BloodBankUtil.isBank(xkParameter.getParameter_value());
}else{
return parameterCache.getParameter_value();
return BloodBankUtil.isBank(parameterCache.getParameter_value());
}
}
@ -141,4 +146,8 @@ public class BloodBankUtil {
return commonUtil.getCurrentTimeDate();
}
public SysUser getUserInfo(String userId){
return sysUserMapper.selectUserByUserName(userId);
}
}

View File

@ -0,0 +1,14 @@
<?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.XkCausalisSetMapper">
<select id="queryList" resultType="com.czblood.bus.pojo.XkCausalisSet">
select * from xk_causalis_set
<where>
<if test="Dept_Type != null and Dept_Type != ''">and Dept_Type = #{Dept_Type}</if>
<if test="Blood_Breed != null and Blood_Breed != ''">and Blood_Breed = #{Blood_Breed}</if>
<if test="Use_Type != null and Use_Type != ''">and Use_Type = #{Use_Type}</if>
</where>
</select>
</mapper>

View File

@ -0,0 +1,12 @@
<?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.XkCheckBloodtypeMapper">
<select id="queryList" resultType="com.czblood.bus.pojo.XkCheckBloodtype">
select * from xk_check_bloodtype where hos_id = #{hos_id}
<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>
</select>
</mapper>

View File

@ -13,7 +13,7 @@
<if test="exp5 != null and exp5 != ''">exp5=#{exp5},</if>
<if test="remark != null">remark=#{remark},</if>
wordbook_code=#{wordbook_code}
where wordbook_sign = #{wordbook_sign} and wordbook_code= #{wordbook_code}
where wordbook_sign = #{wordbook_sign} and wordbook_code= #{wordbook_code_old}
</update>
<delete id="deleteXkDmzd">

View File

@ -3,12 +3,9 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.czblood.bus.mapper.XkTransfuseApplyBeforeMapper">
<select id="queryList" resultType="com.czblood.bus.pojo.XkTransfuseApplyBefore">
select * from xk_transfuse_apply_before
<where>
<if test="bill_no != null and bill_no != ''">and bill_no = #{bill_no}</if>
<if test="beinhos_id != null and beinhos_id != ''">and beinhos_id = #{beinhos_id}</if>
</where>
select * from xk_transfuse_apply_before where hos_id = #{hos_id}
<if test="bill_no != null and bill_no != ''">and bill_no = #{bill_no}</if>
<if test="beinhos_id != null and beinhos_id != ''">and beinhos_id = #{beinhos_id}</if>
</select>

View File

@ -2,8 +2,18 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.czblood.bus.mapper.XkTransfuseApplyCausalisMapper">
<insert id="insert">
insert into xk_transfuse_apply_causalis (Bill_No, Hos_ID, SID,Causalis_Code,Causalis_Type,Causalis_Name,Causalis_Result,Use_Flag,Upload_Flag,Explain)
values (#{bill_no}, #{hos_id}, #{sid}, #{causalis_code}, #{causalis_type}, #{causalis_name}, #{causalis_result}, #{use_flag}, #{upload_flag}, #{explain})
</insert>
<delete id="deleteByBillNo">
delete from xk_transfuse_apply_causalis where Bill_No = #{bill_no}
</delete>
<select id="queryList" resultType="com.czblood.bus.pojo.XkTransfuseApplyCausalis">
select * from xk_transfuse_apply_causalis where Bill_No = #{bill_no}
<if test="SID != null">and sid = #{SID}</if>
</select>
<select id="queryListByBillNo" resultType="com.czblood.bus.pojo.XkTransfuseApplyCausalis">
select * from xk_transfuse_apply_causalis where Bill_No = #{bill_no}
</select>
</mapper>

View File

@ -1,18 +1,15 @@
package com.czblood.busDoctor.controller;
import com.czblood.bus.pojo.XkXtwhIllDiagnose;
import com.czblood.busDoctor.pojo.DTO.TransfuseApplyDTO;
import com.czblood.busDoctor.pojo.VO.TransfuseApplyVO;
import com.czblood.busDoctor.service.TransfuseApplyService;
import com.czblood.common.core.controller.BaseController;
import com.czblood.common.core.domain.Result;
import com.czblood.common.core.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@ -40,6 +37,7 @@ public class TransfuseApplyController extends BaseController {
@ApiOperation("获取病人信息")
@GetMapping("/getPatInfo")
public Result getPatInfo(TransfuseApplyVO transfuseApplyVO){
transfuseApplyVO.setUser_id(getUsername());
return transfuseApplyService.getPatInfo(transfuseApplyVO);
}
@ -55,5 +53,31 @@ public class TransfuseApplyController extends BaseController {
return transfuseApplyService.queryApplyOne(billNo);
}
@ApiOperation("保存前校验")
@PostMapping("/savePreApplyInfo")
public Result savePreApplyInfo(@RequestBody TransfuseApplyDTO transfuseApplyDTO){
transfuseApplyDTO.setUserId(getUsername());
return transfuseApplyService.savePreApplyInfo(transfuseApplyDTO);
}
@ApiOperation("自体血校验")
@GetMapping("/checkSelfBlood")
public Result checkSelfBlood(String beinhos_id){
return transfuseApplyService.checkSelfBlood(beinhos_id);
}
@ApiOperation("校验是否符合输血指征的规则")
@PostMapping("/checkCausalis")
public Result checkCausalis(@RequestBody TransfuseApplyDTO transfuseApplyDTO){
return transfuseApplyService.checkCausalis(transfuseApplyDTO);
}
@ApiOperation("保存申请单")
@PostMapping("/saveApplyInfo")
public Result saveApplyInfo(@RequestBody TransfuseApplyDTO transfuseApplyDTO){
transfuseApplyDTO.setUserId(getUsername());
return transfuseApplyService.saveApplyInfo(transfuseApplyDTO);
}
}

View File

@ -1,6 +1,7 @@
package com.czblood.busDoctor.mapper;
import com.czblood.busDoctor.pojo.DTO.TransfuseApplyInfoOne;
import com.czblood.busDoctor.pojo.VO.TransfuseApplyVO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
@ -10,7 +11,9 @@ import java.util.Map;
public interface TransfuseApplyMapper {
List<Map<String,Object>> queryList(TransfuseApplyVO transfuseApplyVO);
@MapKey("bill_no")
Map<String,Object> queryApplyOne(TransfuseApplyVO transfuseApplyVO);
TransfuseApplyInfoOne queryApplyOne(TransfuseApplyVO transfuseApplyVO);
List<Map<String,Object>> queryApplyBeforeList(@Param("dept_id") String dept_id,@Param("assess_person") String assess_person);
int queryXkCheckBloodtypeCount(@Param("beinhos_id") String beinhos_id);
String checkSameBloodType(@Param("beinhos_id") String beinhos_id,@Param("blood_breed") String blood_breed);
List<Map<String,Object>> checkSelfBlood(@Param("beinhos_id") String beinhos_id);
}

View File

@ -0,0 +1,14 @@
package com.czblood.busDoctor.pojo.DTO;
import com.czblood.bus.pojo.XkCausalisSet;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TransfuseApplyCausalisSetDTO {
private XkCausalisSet xkCausalisSet;
private String testValue;
}

View File

@ -1,7 +1,7 @@
package com.czblood.busDoctor.pojo.DTO;
import com.czblood.bus.pojo.XkTransfuseApply;
import com.czblood.bus.pojo.XkTransfuseApplyBloodbreed;
import com.czblood.bus.pojo.XkTransfuseApplyCausalis;
import com.czblood.bus.pojo.XkTransfuseApplyTestitem;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
@ -9,18 +9,18 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Map;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TransfuseApplyDTO {
@ApiModelProperty("输血申请单列表信息")
private List<Map<String,Object>> transfuseApplyList;
@ApiModelProperty("输血申请单信息")
private Map<String,Object> transfuseApplyMap;
private TransfuseApplyInfoOne transfuseApplyInfoOne;
@ApiModelProperty(value = "输血前lis检查项目")
private List<XkTransfuseApplyTestitem> xkTransfuseApplyTestitemList;
@ApiModelProperty("输血申请单品种列表")
private List<XkTransfuseApplyBloodbreed> xkTransfuseApplyBloodbreedList;
@ApiModelProperty("输血指征列表")
private List<XkTransfuseApplyCausalis> xkTransfuseApplyCausalisList;
private String userId;
}

View File

@ -0,0 +1,168 @@
package com.czblood.busDoctor.pojo.DTO;
import com.czblood.bus.pojo.XkTransfuseApply;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TransfuseApplyInfoOne {
@ApiModelProperty("医疗机构ID")
private String hos_id;
@ApiModelProperty("住院号")
@NotBlank(message = "住院号不能为空")
private String beinhos_id;
@ApiModelProperty("病人姓名")
@NotBlank(message = "病人姓名不能为空")
private String patient_name;
@NotBlank(message = "病人性别不能为空")
@ApiModelProperty("病人性别")
private String patient_sex;
@ApiModelProperty("病人年龄")
private String age;
@ApiModelProperty("病人生日")
private Date patient_birthday;
@ApiModelProperty("病人属地")
private String apanage;
@ApiModelProperty("单据号")
private String bill_no;
@ApiModelProperty("病人唯一号")
private String beinhos_number;
@ApiModelProperty("病区代码")
private String zone_id;
@ApiModelProperty("床号")
private String patient_bed;
private String casehistory_id;
@ApiModelProperty("输血史")
private String transfuse_history;
@ApiModelProperty("输血反应史")
private String reaction_history;
@ApiModelProperty("妊娠史")
private String gestation_history;
@ApiModelProperty("分娩史")
private String parturition_history;
@ApiModelProperty("移植配型史")
private String match_history;
@ApiModelProperty("器官移植史")
private String transplant_history;
private String dept_id;
@ApiModelProperty("申请时间")
private Date apply_date;
private String send_person;
@ApiModelProperty("收费标志")
private String charge_sign;
@ApiModelProperty("输入人")
private String input_person;
@ApiModelProperty("接收时间")
private Date receive_date;
@ApiModelProperty("主治医师")
private String attending_medic;
@ApiModelProperty("上级医师")
private String treat_medic;
@ApiModelProperty("输血指征")
private String causalis;
@ApiModelProperty("输血科主任")
private String bank_director;
@ApiModelProperty("医务部负责人")
private String medical_affairs;
@ApiModelProperty("对应的条码ID")
private String sample_id;
@ApiModelProperty("采集时间")
private Date gather_date;
@ApiModelProperty("ABO血型")
private String abo_type;
@ApiModelProperty("RH血型")
private String rh_type;
@ApiModelProperty("审核标志")
private String check_sign;
@ApiModelProperty("审核意见")
private String check_explain;
@ApiModelProperty("状态(A=未审核、B=已审核、C=已配血、D=已发血、Z=作废、BD=未补录、W=已补录、F=已复核血型、S=已追加配血、N=审核未通过)")
private String bill_stasus;
private String bill_type;
@ApiModelProperty("申请医生")
private String apply_medic;
@ApiModelProperty("诊断")
private String diagnoses;
@ApiModelProperty("输血目的")
private String intent;
@NotBlank(message = "申请单类型不能为空")
@ApiModelProperty("申请单类型")
private String apply_type;
@ApiModelProperty("第一次输血时间")
private Date use1_date;
@ApiModelProperty("第二次输血时间")
private Date use2_date;
@ApiModelProperty("第三次输血时间")
private Date use3_date;
private String remark;
@ApiModelProperty("预约入库标志(N=否、Y=是)")
private String is_plan;
@ApiModelProperty("单据类别(A,B,C,D,J)")
private String bill_sort;
@ApiModelProperty("是否有标本申请")
private String sample_sign;
@ApiModelProperty("输入科室")
private String input_dept;
@ApiModelProperty("上级医师审核标志")
private String send_able;
@ApiModelProperty("上级医师审核时间")
private Date medic_check_date;
@ApiModelProperty("审核医生")
private String check_medic;
@ApiModelProperty("是否大量用血(N=否、Y=是)")
private String is_large_use;
@ApiModelProperty("操作类型(C输血申请,Z自体血申请单,S为输血治疗单)")
private String operation_type;
@ApiModelProperty("血型复核结果与申请单的血型不一致继续配血标志(N=否、Y=是)")
private String bloodcheck_abnor;
@ApiModelProperty("当血型复核结果与申请单的血型不一致时,输血申请单是否可以继续进行下一步的流程操作,Y表示可以,N表示不可以")
private String abnor_next;
@ApiModelProperty("是否同意配血(N=否、Y=是)")
private String agreement_ink;
private String exp1;
private String exp2;
private String exp3;
private String exp4;
@ApiModelProperty("最后修改时间")
private Date last_modified;
@ApiModelProperty("通知标志")
private String notify_sign;
@ApiModelProperty("联系手机")
private String adm_no;
private BigDecimal Use1_Num;
private BigDecimal Use2_Num;
private BigDecimal Use3_Num;
@ApiModelProperty("科室类型(A手术科室,B非手术科室)")
private String Dept_Type;
@NotBlank(message = "手术科室必须填写后面的类型")
private String use_type;
@ApiModelProperty("单病种")
private String Ill_Code;
@ApiModelProperty("手术名称")
private String Ops_Name;
private String isemergency;
@ApiModelProperty("是否合理(不合理N,待定W,合理Y)")
private String Valid_Flag;
@ApiModelProperty("通知消息确认标志(N=否、Y=是)")
private String notice_yn;
@ApiModelProperty("his系统申请单号")
private String his_SerialNo;
@ApiModelProperty("输血评估单")
private String assess_bill_no;
@ApiModelProperty("手术名称")
private String operation_name;
@ApiModelProperty("手术级别")
private String operation_level;
@ApiModelProperty("身份证号")
private String card_no;
}

View File

@ -19,4 +19,6 @@ public class TransfuseApplyVO {
private String doctor_code;
@ApiModelProperty("查询的单据编号")
private String bill_no;
@ApiModelProperty("操作用户")
private String user_id;
}

View File

@ -1,6 +1,7 @@
package com.czblood.busDoctor.service;
import com.czblood.bus.pojo.XkTransfuseApply;
import com.czblood.busDoctor.pojo.DTO.TransfuseApplyDTO;
import com.czblood.busDoctor.pojo.VO.TransfuseApplyVO;
import com.czblood.common.core.domain.Result;
@ -12,4 +13,12 @@ public interface TransfuseApplyService {
Result queryApplyOne(String billNo);
Result queryApplyBeforeList(String dept_id,String assess_person);
Result savePreApplyInfo(TransfuseApplyDTO transfuseApplyDTO);
Result checkSelfBlood(String beinhosId);
Result saveApplyInfo(TransfuseApplyDTO transfuseApplyDTO);
Result checkCausalis(TransfuseApplyDTO transfuseApplyDTO);
}

View File

@ -1,19 +1,24 @@
package com.czblood.busDoctor.service.impl;
import com.czblood.bus.mapper.XkPatientInfoMapper;
import com.czblood.bus.mapper.XkTransfuseApplyBeforeMapper;
import com.czblood.bus.mapper.XkTransfuseApplyBloodbreedMapper;
import com.czblood.bus.mapper.XkTransfuseApplyTestitemMapper;
import com.czblood.bus.mapper.*;
import com.czblood.bus.pojo.*;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.bus.utils.BloodInterfaceUtil;
import com.czblood.busDoctor.mapper.TransfuseApplyMapper;
import com.czblood.busDoctor.pojo.DTO.TransfuseApplyCausalisSetDTO;
import com.czblood.busDoctor.pojo.DTO.TransfuseApplyDTO;
import com.czblood.busDoctor.pojo.DTO.TransfuseApplyInfoOne;
import com.czblood.busDoctor.pojo.VO.TransfuseApplyVO;
import com.czblood.busDoctor.service.TransfuseApplyService;
import com.czblood.busDoctor.utils.TransfuseApplyUtil;
import com.czblood.common.core.domain.Result;
import com.czblood.common.core.domain.entity.SysUser;
import com.czblood.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -32,7 +37,14 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
XkTransfuseApplyBeforeMapper xkTransfuseApplyBeforeMapper;
@Resource
XkPatientInfoMapper xkPatientInfoMapper;
@Resource
BloodBankUtil bloodBankUtil;
@Resource
XkProTransfuseProjectMapper xkProTransfuseProjectMapper;
@Resource
XkTransfuseApplyCausalisMapper xkTransfuseApplyCausalisMapper;
@Resource
TransfuseApplyUtil transfuseApplyUtil;
/**
* 获取病人信息
@ -46,15 +58,67 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
String billNo = transfuseApplyVO.getBill_no();
if (billNo == null || billNo.equals("")) return new Result("-1", "查询的申请单号不能为空!");
XkTransfuseApplyBefore xkTransfuseApplyBefore = xkTransfuseApplyBeforeMapper.queryOne(billNo);
if (xkTransfuseApplyBefore != null) return new Result("-1", "没有查到对应的输血评估单!");
if (xkTransfuseApplyBefore == null) return new Result("-1", "没有查到对应的输血评估单!");
String beinhosId = xkTransfuseApplyBefore.getBeinhos_id();
XkPatientInfo xkPatientInfo = xkPatientInfoMapper.queryOne(beinhosId);
if (xkPatientInfo != null) return new Result("-1"," 没有查到对应的病人信息!");
if (xkPatientInfo == null) return new Result("-1"," 没有查到对应的病人信息!");
//将输血评估的信息写入到输血申请单
XkTransfuseApply xkTransfuseApply = new XkTransfuseApply();
xkTransfuseApply.setBeinhos_id(beinhosId);
String userId = transfuseApplyVO.getUser_id();
Result result = getTransfuseApplyInfo(xkTransfuseApplyBefore,xkPatientInfo,userId);
if (!result.getCode().equals("0")) return result;
//获取输血前lis检验信息
List<XkTransfuseApplyTestitem> xkTransfuseApplyTestitemList = xkTransfuseApplyTestitemMapper.queryList(billNo);
int count = transfuseApplyMapper.queryXkCheckBloodtypeCount(beinhosId);
String warnMsg = "";
String code = "0"; //返回值code
if(count > 0) warnMsg = "该患者历史血型复核为亚型,请联系输血科确认!";
if(!warnMsg.equals("")) code = "3";
TransfuseApplyDTO transfuseApplyDTO = new TransfuseApplyDTO();
transfuseApplyDTO.setTransfuseApplyInfoOne((TransfuseApplyInfoOne)result.getData());
transfuseApplyDTO.setXkTransfuseApplyTestitemList(xkTransfuseApplyTestitemList);
return new Result(code,warnMsg,transfuseApplyDTO);
}
return null;
private Result getTransfuseApplyInfo(XkTransfuseApplyBefore xkTransfuseApplyBefore,XkPatientInfo xkPatientInfo,String userId) {
String beinhosId = xkTransfuseApplyBefore.getBeinhos_id();
TransfuseApplyInfoOne transfuseApplyInfoOne = new TransfuseApplyInfoOne();
//XkTransfuseApply xkTransfuseApply = new XkTransfuseApply();
transfuseApplyInfoOne.setBeinhos_id(beinhosId);
transfuseApplyInfoOne.setHos_id(xkTransfuseApplyBefore.getHos_id());
transfuseApplyInfoOne.setBeinhos_number(xkPatientInfo.getBeinhos_number());
transfuseApplyInfoOne.setZone_id(xkTransfuseApplyBefore.getZone_id());
transfuseApplyInfoOne.setPatient_bed(xkTransfuseApplyBefore.getPatient_bed());
transfuseApplyInfoOne.setTransfuse_history(xkPatientInfo.getTransfuse_history());
transfuseApplyInfoOne.setReaction_history(xkPatientInfo.getReaction_history());
transfuseApplyInfoOne.setGestation_history(xkPatientInfo.getGestation_history());
transfuseApplyInfoOne.setParturition_history(xkPatientInfo.getParturition_history());
transfuseApplyInfoOne.setMatch_history(xkPatientInfo.getMatch_history());
transfuseApplyInfoOne.setTransplant_history(xkPatientInfo.getTransplant_history());
transfuseApplyInfoOne.setDept_id(xkTransfuseApplyBefore.getDept_id());
transfuseApplyInfoOne.setApply_date(bloodBankUtil.getCurrentTimeDate());
transfuseApplyInfoOne.setInput_person(userId);
transfuseApplyInfoOne.setAttending_medic(userId);
transfuseApplyInfoOne.setTreat_medic(userId);
transfuseApplyInfoOne.setAbo_type(xkPatientInfo.getAbo());
transfuseApplyInfoOne.setRh_type(xkPatientInfo.getRh());
transfuseApplyInfoOne.setBill_stasus("A");
transfuseApplyInfoOne.setApply_medic(userId);
transfuseApplyInfoOne.setDiagnoses(xkTransfuseApplyBefore.getDiagnoses());
transfuseApplyInfoOne.setApply_type("001"); //常规用血
transfuseApplyInfoOne.setUse1_date(bloodBankUtil.getCurrentTimeDate());
transfuseApplyInfoOne.setSample_sign("N");
transfuseApplyInfoOne.setInput_dept(BloodBankUtil.isBank(xkTransfuseApplyBefore.getDept_id()));
transfuseApplyInfoOne.setOperation_type("C");
transfuseApplyInfoOne.setAgreement_ink("Y");
//xkTransfuseApply.setDept_Type(""); //这个前端传吧,而且是必填的
transfuseApplyInfoOne.setValid_Flag("Y"); //默认是合理的
transfuseApplyInfoOne.setNotice_yn("N");
transfuseApplyInfoOne.setAssess_bill_no(xkTransfuseApplyBefore.getBill_no()); //输血评估单号
transfuseApplyInfoOne.setPatient_name(xkPatientInfo.getPatient_name());
transfuseApplyInfoOne.setPatient_sex(xkPatientInfo.getPatient_sex());
transfuseApplyInfoOne.setAge(xkPatientInfo.getAge());
transfuseApplyInfoOne.setApanage(xkPatientInfo.getApanage());
return new Result("0","操作成功",transfuseApplyInfoOne);
}
@Override
@ -69,13 +133,15 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
public Result queryApplyOne(String billNo) {
TransfuseApplyVO transfuseApplyVO = new TransfuseApplyVO();
transfuseApplyVO.setBill_no(billNo);
Map<String, Object> transfuseApplyMap = transfuseApplyMapper.queryApplyOne(transfuseApplyVO);
TransfuseApplyInfoOne transfuseApplyInfoOne = transfuseApplyMapper.queryApplyOne(transfuseApplyVO);
TransfuseApplyDTO transfuseApplyDTO = new TransfuseApplyDTO();
transfuseApplyDTO.setTransfuseApplyMap(transfuseApplyMap);
transfuseApplyDTO.setTransfuseApplyInfoOne(transfuseApplyInfoOne);
List<XkTransfuseApplyTestitem> xkTransfuseApplyTestitemList = xkTransfuseApplyTestitemMapper.queryList(billNo);
transfuseApplyDTO.setXkTransfuseApplyTestitemList(xkTransfuseApplyTestitemList);
List<XkTransfuseApplyBloodbreed> xkTransfuseApplyBloodbreedList = xkTransfuseApplyBloodbreedMapper.queryOne(billNo);
transfuseApplyDTO.setXkTransfuseApplyBloodbreedList(xkTransfuseApplyBloodbreedList);
List<XkTransfuseApplyCausalis> xkTransfuseApplyCausalisList = xkTransfuseApplyCausalisMapper.queryListByBillNo(billNo);
transfuseApplyDTO.setXkTransfuseApplyCausalisList(xkTransfuseApplyCausalisList);
return new Result("0", "查询成功", transfuseApplyDTO);
}
@ -89,4 +155,139 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
List<Map<String, Object>> transfuseApplyBeforeList = transfuseApplyMapper.queryApplyBeforeList(dept_id, assess_person);
return new Result("0", "查询成功", transfuseApplyBeforeList);
}
@Override
public Result savePreApplyInfo(TransfuseApplyDTO transfuseApplyDTO) {
TransfuseApplyInfoOne transfuseApplyInfoOne = transfuseApplyDTO.getTransfuseApplyInfoOne();
List<XkTransfuseApplyBloodbreed> xkTransfuseApplyBloodbreedList = transfuseApplyDTO.getXkTransfuseApplyBloodbreedList();
List<XkTransfuseApplyTestitem> xkTransfuseApplyTestitemList = transfuseApplyDTO.getXkTransfuseApplyTestitemList();
String beinhosId = transfuseApplyInfoOne.getBeinhos_id();
String billStasus = transfuseApplyInfoOne.getBill_stasus();
switch (billStasus) {
case "B":
return new Result("-1","该申请单已经审核!");
case "C":
return new Result("-1","该申请单已经配血!");
case "D":
return new Result("-1","该申请单已经发血!");
case "Z":
return new Result("-1","该申请单已经作废!");
case "S":
return new Result("-1","该申请单正在增加血液!");
}
String applyType = transfuseApplyInfoOne.getApply_type();
if(applyType.contains("手术")){
String operationName = transfuseApplyInfoOne.getOperation_name();
if(StringUtils.isEmpty(operationName)){
return new Result("-1","手术备血必须填写手术名称!");
}
}
XkDmzd dictCacheOne = bloodBankUtil.getDictCacheOne("sqlx", applyType);
//没有开启绿色通道的单据类型
if(!dictCacheOne.getExp2().equals("Y")){
String sfsyzckz = BloodBankUtil.isBank(bloodBankUtil.getParameterValue("SFSYZCKZ"));
//开启职称校验
if(sfsyzckz.equals("Y")){
//申请单的申请医生
Result result = checkZC(transfuseApplyInfoOne.getApply_medic());
if(!result.getCode().equals("0")) return result;
if(Integer.parseInt(result.getData().toString()) < 2) return new Result("-1","申请医师必须具备中级或以上职称,录入的申请医师不具备该职称。");
//申请单的上级医师
Result result1 = checkZC(transfuseApplyInfoOne.getTreat_medic());
if(!result1.getCode().equals("0")) return result1;
if(Integer.parseInt(result1.getData().toString()) < 3) return new Result("-1","上级医师必须具备高级职称,录入的上级医师不具备该职称。");
XkProTransfuseProject xkProTransfuseProject = new XkProTransfuseProject();
xkProTransfuseProject.setNeed("Y");
List<XkProTransfuseProject> xkProTransfuseProjectList = xkProTransfuseProjectMapper.queryList(xkProTransfuseProject);
//校验检验结果是否为空
for (XkTransfuseApplyTestitem xkTransfuseApplyTestitem : xkTransfuseApplyTestitemList) {
String itemResult = xkTransfuseApplyTestitem.getItem_result();
String itemName = xkTransfuseApplyTestitem.getItem_name();
XkProTransfuseProject xkProTransfuseProject2 = xkProTransfuseProjectList.stream().filter(xkProTransfuseProject1 -> xkProTransfuseProject1.getPro_name().equals(itemName)).findFirst().orElse(null);
if(xkProTransfuseProject2 != null && StringUtils.isEmpty(itemResult)) return new Result("-1","请输入"+itemName+"的检验结果!");
}
}
}
String agreementInk = BloodBankUtil.isBank(transfuseApplyInfoOne.getAgreement_ink());
if(!agreementInk.equals("Y")) return new Result("-1","请先签署输血知情同意书!");
String intent = BloodBankUtil.isBank(transfuseApplyInfoOne.getIntent());
if(intent.equals("")) return new Result("-1","请填写输血目的!");
for (XkTransfuseApplyBloodbreed xkTransfuseApplyBloodbreed : xkTransfuseApplyBloodbreedList) {
String bloodBreed = xkTransfuseApplyBloodbreed.getBlood_breed();
String preBillNo = transfuseApplyMapper.checkSameBloodType(beinhosId, bloodBreed);
//申请血型校验
String sqxxnfwk = bloodBankUtil.getParameterValue("SQXXNFWK");
if(!sqxxnfwk.equals("Y")){
//申请血型不能为空
if(StringUtils.isEmpty(bloodBreed)) return new Result("-1","请输入申请血型!");
}
if(!StringUtils.isEmpty(preBillNo)){
return new Result("2","当前患者存在相同的血液品种并且未审核的申请单,是否调出此单进行修改?",preBillNo);
}
}
return null;
}
@Override
public Result checkSelfBlood(String beinhosId) {
List<Map<String, Object>> mapList = transfuseApplyMapper.checkSelfBlood(beinhosId);
String msg = "";
for (Map<String, Object> stringObjectMap : mapList) {
String breedName = BloodBankUtil.isBank(stringObjectMap.get("breed_name"));
String capacity = BloodBankUtil.isBank(stringObjectMap.get("capacity"));
String unit = BloodBankUtil.isBank(stringObjectMap.get("unit"));
msg = msg + breedName + ":" + capacity + unit + ",";
}
if(msg.equals("")){
return new Result("0","校验通过!");
}else{
msg = "检测到该病患尚有贮存式自体血未出库,具体如下:" + msg + "是否继续申请血液?";
return new Result("2",msg);
}
}
/**
* 保存申请单
* @param transfuseApplyDTO
* @return
*/
@Override
public Result saveApplyInfo(TransfuseApplyDTO transfuseApplyDTO) {
//前置校验
//产生申请单编号
//校验是否是大量用血
//保存数据
return null;
}
/**
* 校验是否符合输血指征的规则
* @param transfuseApplyDTO
* @return
*/
@Override
public Result checkCausalis(TransfuseApplyDTO transfuseApplyDTO) {
//输血指征处理
//输血指征是否输血合理,校验是否符合输血指征的规则
//他原来的逻辑,分单据类型了,没搞懂为啥分,先统一校验吧
return transfuseApplyUtil.checkCausalis(transfuseApplyDTO);
// if(result.getCode().equals("1")){
// List<TransfuseApplyCausalisSetDTO> xkCausalisSetRetList = (List<TransfuseApplyCausalisSetDTO>)result.getData();
// }
}
/**
* 校验医生职称是否符合要求
* @return
*/
public Result checkZC(String userId){
SysUser userInfo = bloodBankUtil.getUserInfo(userId);
if(userInfo == null) return new Result("-1","用户不存在!");
String postname = BloodBankUtil.isBank(userInfo.getPostname());
if(postname.equals("")) postname = "0";
return new Result("0","",postname);
}
}

View File

@ -1,14 +1,160 @@
package com.czblood.busDoctor.utils;
import cn.hutool.core.util.StrUtil;
import com.czblood.bus.mapper.XkCausalisSetMapper;
import com.czblood.bus.pojo.XkCausalisSet;
import com.czblood.bus.pojo.XkTransfuseApplyBloodbreed;
import com.czblood.bus.pojo.XkTransfuseApplyTestitem;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.busDoctor.pojo.DTO.TransfuseApplyCausalisSetDTO;
import com.czblood.busDoctor.pojo.DTO.TransfuseApplyDTO;
import com.czblood.busDoctor.pojo.DTO.TransfuseApplyInfoOne;
import com.czblood.common.core.domain.Result;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Component
public class TransfuseApplyUtil {
@Resource
XkCausalisSetMapper xkCausalisSetMapper;
/**
* 计算大量用血
*/
public void computeLargeBlood(){
}
/**
* 输血指征判断是否输血合理
* @param transfuseApplyDTO
* @return
*/
public Result checkCausalis(TransfuseApplyDTO transfuseApplyDTO){
TransfuseApplyInfoOne transfuseApplyInfoOne = transfuseApplyDTO.getTransfuseApplyInfoOne();
List<XkTransfuseApplyBloodbreed> xkTransfuseApplyBloodbreedList = transfuseApplyDTO.getXkTransfuseApplyBloodbreedList();
String beinhosId = BloodBankUtil.isBank(transfuseApplyInfoOne.getBeinhos_id());
String deptType = BloodBankUtil.isBank(transfuseApplyInfoOne.getDept_Type());
String useType = BloodBankUtil.isBank(transfuseApplyInfoOne.getUse_type());
String billNo = BloodBankUtil.isBank(transfuseApplyInfoOne.getBill_no());
XkCausalisSet xkCausalisSet = new XkCausalisSet();
xkCausalisSet.setUse_Sign("Y");
xkCausalisSet.setDept_Type(deptType);
xkCausalisSet.setUse_Type(useType);
List<XkCausalisSet> xkCausalisSetList = xkCausalisSetMapper.queryList(xkCausalisSet);
List<TransfuseApplyCausalisSetDTO> xkCausalisSetRetList = new ArrayList<>();
//这个返回也是原来的逻辑
if(beinhosId.equals("") || deptType.equals("") || useType.equals("") ) return new Result("0","字段没有填完整,无法校验!");
List<XkTransfuseApplyTestitem> xkTransfuseApplyTestitemList = transfuseApplyDTO.getXkTransfuseApplyTestitemList();
for (XkTransfuseApplyBloodbreed xkTransfuseApplyBloodbreed : xkTransfuseApplyBloodbreedList) {
String bloodBreed = BloodBankUtil.isBank(xkTransfuseApplyBloodbreed.getBlood_breed());
if(bloodBreed.equals("")) continue;
List<XkCausalisSet> collect = xkCausalisSetList.stream().filter(xkCausalisSet1 -> xkCausalisSet1.getBlood_Breed().equals(bloodBreed)).collect(Collectors.toList());
//校验输血指征是否合理
//这里的写法没有完全按照原来的逻辑来,原来的逻辑太稀碎了,我按照自己的理解写了一个,后面遇到问题再改吧,原来那个逻辑真看不下去
for (XkTransfuseApplyTestitem xkTransfuseApplyTestitem : xkTransfuseApplyTestitemList) {
String itemName = xkTransfuseApplyTestitem.getItem_name();
String itemResult = xkTransfuseApplyTestitem.getItem_result();
XkCausalisSet xkCausalisSet2 = calcCausalis(collect, itemName, itemResult);
if(xkCausalisSet2 != null){
//没有校验通过的,增加数据
TransfuseApplyCausalisSetDTO transfuseApplyCausalisSetDTO = new TransfuseApplyCausalisSetDTO();
transfuseApplyCausalisSetDTO.setXkCausalisSet(xkCausalisSet2);
transfuseApplyCausalisSetDTO.setTestValue(itemResult);
xkCausalisSetRetList.add(transfuseApplyCausalisSetDTO);
}
}
}
if(xkCausalisSetRetList.isEmpty()){
return new Result("0","校验成功!");
}else{
return new Result("1","校验失败",xkCausalisSetRetList);
}
}
public XkCausalisSet calcCausalis(List<XkCausalisSet> xkCausalisSetList, String proName,String testValue){
//查找是否包含该指标
List<XkCausalisSet> collect = xkCausalisSetList.stream().filter(xkCausalisSet -> xkCausalisSet.getPro_Name().equals(proName)).collect(Collectors.toList());
if(collect.isEmpty()) return null;
//校验指标是否合理
for (XkCausalisSet xkCausalisSet : collect) {
String resultExpression = xkCausalisSet.getResult_Expression();
String testValueStandard = xkCausalisSet.getTest_Value();
String testValueStandard2 = xkCausalisSet.getTest_Value2();
if(!StrUtil.isNumeric(testValue)) continue; //不是数字型的不处理
if(!StrUtil.isNumeric(testValueStandard)) continue;
if(!StrUtil.isNumeric(testValueStandard2)) continue;
String causalisResult = xkCausalisSet.getCausalis_Result();
if(causalisResult.equals("")) continue;
if(causalisResult.equals("Y")){
//合理范围,那么不在这个范围内的,代表需要增加说明
switch (resultExpression) {
case ">":
if(Integer.parseInt(testValue) > Integer.parseInt(testValueStandard)) {
}else{
return xkCausalisSet;
}
break;
case "<":
if(Integer.parseInt(testValue) < Integer.parseInt(testValueStandard)) {
}else {
return xkCausalisSet;
}
break;
case "≥":
if(Integer.parseInt(testValue) >= Integer.parseInt(testValueStandard)) {
}else{
return xkCausalisSet;
}
break;
case "≤":
if(Integer.parseInt(testValue) <= Integer.parseInt(testValueStandard)) {
}else{
return xkCausalisSet;
}
break;
case "between":
if(Integer.parseInt(testValue) >= Integer.parseInt(testValueStandard) && Integer.parseInt(testValue) <= Integer.parseInt(testValueStandard2)) {
}else{
return xkCausalisSet;
}
break;
}
}else{
//不合理范围,代表直接返回
switch (resultExpression) {
case ">":
if(Integer.parseInt(testValue) > Integer.parseInt(testValueStandard)) return xkCausalisSet;
break;
case "<":
if(Integer.parseInt(testValue) < Integer.parseInt(testValueStandard)) return xkCausalisSet;
break;
case "≥":
if(Integer.parseInt(testValue) >= Integer.parseInt(testValueStandard)) return xkCausalisSet;
break;
case "≤":
if(Integer.parseInt(testValue) <= Integer.parseInt(testValueStandard)) return xkCausalisSet;
break;
case "between":
if(Integer.parseInt(testValue) >= Integer.parseInt(testValueStandard) && Integer.parseInt(testValue) <= Integer.parseInt(testValueStandard2)) return xkCausalisSet;
break;
}
}
}
return null;
}
}

View File

@ -17,13 +17,13 @@
from xk_transfuse_apply_bloodbreed x join xk_blood_breed xx on xx.breed_code=x.blood_breed where x.bill_no=xk_transfuse_apply.bill_no FOR XML PATH('') ),2,999) as req_breed
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.operation_type = 'C' OR ISNULL(xk_transfuse_apply.operation_type,'') = '')
and xk_transfuse_apply.apply_date > getdate() - #{day}
and xk_transfuse_apply.apply_date > getdate() - #{day} and xk_transfuse_apply.hos_id = #{hos_id}
<if test="bill_status != null and bill_status != ''">and xk_transfuse_apply.bill_stasus = #{bill_status}</if>
<if test="dept_code != null and dept_code != ''">and xk_transfuse_apply.dept_id = #{dept_code}</if>
<if test="dept_code != null and dept_code != ''">and (xk_transfuse_apply.dept_id = #{dept_code} or xk_transfuse_apply.input_dept = #{dept_code})</if>
<if test="doctor_code != null and doctor_code != ''">and xk_transfuse_apply.apply_medic = #{doctor_code}</if>
</select>
<select id="queryApplyOne" resultType="java.util.Map">
<select id="queryApplyOne" resultType="com.czblood.busDoctor.pojo.DTO.TransfuseApplyInfoOne">
SELECT top 1 xk_patient_info.hos_id,
xk_patient_info.patient_name,
xk_patient_info.age,
@ -92,8 +92,9 @@
FROM xk_patient_info RIGHT OUTER JOIN xk_transfuse_apply ON xk_patient_info.beinhos_id = xk_transfuse_apply.beinhos_id ,
xk_transfuse_apply_bloodbreed
WHERE xk_transfuse_apply.bill_no = xk_transfuse_apply_bloodbreed.bill_no AND
xk_transfuse_apply.bill_no = #{bill_no}
xk_transfuse_apply.bill_no = #{bill_no} and xk_transfuse_apply.hos_id = #{hos_id}
</select>
<select id="queryApplyBeforeList" resultType="java.util.Map">
select
xk_transfuse_apply_before.bill_no,
@ -108,5 +109,50 @@
xk_transfuse_apply_before.beinhos_id = xk_patient_info.beinhos_id AND
xk_transfuse_apply_before.assess_data>GETDATE() - 1 AND
(xk_transfuse_apply_before.dept_id=#{dept_id} or xk_transfuse_apply_before.assess_person=#{assess_person})
and xk_transfuse_apply_before.hos_id = #{hos_id}
</select>
<select id="queryXkCheckBloodtypeCount" resultType="java.lang.Integer">
SELECT Count (*) FROM xk_check_bloodtype where hos_id = #{hos_id}
<![CDATA[ and isnull( sub_blood , '' ) <> '' ]]>
and beinhos_id = #{beinhos_id};
</select>
<select id="checkSameBloodType" resultType="java.lang.String">
select distinct t1.bill_no
into :ls_pre_billno
from xk_transfuse_apply t1 , xk_transfuse_apply_bloodbreed t2
where t1.apply_date in (
select max ( apply_date )
from xk_transfuse_apply a , xk_transfuse_apply_bloodbreed b , xk_blood_breed d
where a.bill_no =b.bill_no and
b.blood_breed =d.breed_code and
d.blood_kind ='0004' and
a.beinhos_id = #{beinhos_id} and
b.blood_breed = #{blood_breed} and
isnull ( a.check_sign , 'N' ) ='N' and
<![CDATA[DATEDIFF ( day , apply_date , GETDATE ( ) ) < 3 ) and]]>
t2.blood_breed in (
select breed_code
from xk_blood_breed
where blood_kind ='0004' ) and
t1.bill_no =t2.bill_no;
</select>
<select id="checkSelfBlood" resultType="java.util.Map">
SELECT xk_blood_breed.breed_name,
sum(xk_blood_info.capacity) as capacity,
xk_blood_info.unit
FROM xk_blood_breed,
xk_blood_info,
xk_gather_detail,
xk_gather_main,
xk_transfuse_apply
WHERE ( xk_gather_detail.bill_no = xk_gather_main.bill_no ) and
( xk_blood_info.blood_no = xk_gather_detail.blood_no ) and
( xk_blood_info.blood_breed = xk_blood_breed.breed_code ) and
( xk_gather_main.apply_no = xk_transfuse_apply.bill_no ) and
( ( xk_blood_info.blood_sort = 'Z' ) AND
( xk_blood_info.blood_status = '1' ) AND
( xk_transfuse_apply.beinhos_id = #{beinhos_id} ) )
group by xk_blood_breed.breed_name,xk_blood_info.unit
</select>
</mapper>

View File

@ -53,13 +53,23 @@ public class SysDept extends BaseEntity
/** 父部门名称 */
private String parentName;
@NotNull(message = "部门编码不能为空")
private String deptCode;
private String deptCodeOld;
private String hos_id;
/** 子部门 */
private List<SysDept> children = new ArrayList<SysDept>();
public String getDeptCodeOld() {
return deptCodeOld;
}
public void setDeptCodeOld(String deptCodeOld) {
this.deptCodeOld = deptCodeOld;
}
public String getHos_id() {
return hos_id;
}
@ -221,6 +231,7 @@ public class SysDept extends BaseEntity
.append("updateTime", getUpdateTime())
.append("deptCode", getDeptCode())
.append("hos_id", getHos_id())
.append("deptCodeOld", getDeptCodeOld())
.toString();
}
}

View File

@ -64,7 +64,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectDeptById" parameterType="Long" resultMap="SysDeptResult">
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status,
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status,d.dept_code,d.hos_id,
(select dept_name from sys_dept where dept_id = d.parent_id) parent_name
from sys_dept d
where d.dept_id = #{deptId}

View File

@ -344,6 +344,21 @@ if not exists(select 1 from dbo.xk_dmzd where wordbook_sign = 'BASE')
('nooperatype','急性失血','急性失血','Y'),
('nooperatype','新生儿科','新生儿科','Y')
insert into xk_dmzd(wordbook_sign,wordbook_code,wordbook_name,use_sign) values('BASE','abotype','ABO血型','Y')
insert into xk_dmzd(wordbook_sign,wordbook_code,wordbook_name,use_sign) values
('abotype','A','A','Y'),
('abotype','B','B','Y'),
('abotype','O','O','Y'),
('abotype','AB','AB','Y'),
('abotype','未知','未知','Y')
insert into xk_dmzd(wordbook_sign,wordbook_code,wordbook_name,use_sign) values('BASE','rhtype','RH血型','Y')
insert into xk_dmzd(wordbook_sign,wordbook_code,wordbook_name,use_sign) values
('rhtype','+','+','Y'),
('rhtype','-','-','Y'),
('rhtype','未知','未知','Y')
END
@ -448,3 +463,8 @@ if not exists(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'xk_p
end
go
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_parameter' AND type = 'PK' )
BEGIN
ALTER TABLE xk_parameter ADD CONSTRAINT PK_xk_parameter PRIMARY KEY CLUSTERED (parameter_code);
END
GO