整理结构,输血申请单保存业务

This commit is contained in:
jiangs 2026-07-01 15:31:48 +08:00
parent f51041a4d8
commit bb65302b51
43 changed files with 288 additions and 73 deletions

View File

@ -1,7 +1,7 @@
package com.czblood.bus.cache;
import com.alibaba.fastjson2.JSONArray;
import com.czblood.bus.pojo.XkDmzd;
import com.czblood.bus.pojo.xtwh.XkDmzd;
import com.czblood.common.constant.CacheConstants;
import com.czblood.common.core.redis.RedisCache;
import com.czblood.common.utils.StringUtils;

View File

@ -1,15 +1,11 @@
package com.czblood.bus.cache;
import com.alibaba.fastjson2.JSONArray;
import com.czblood.bus.pojo.XkDmzd;
import com.czblood.bus.pojo.XkParameter;
import com.czblood.bus.pojo.xtwh.XkParameter;
import com.czblood.common.constant.CacheConstants;
import com.czblood.common.core.redis.RedisCache;
import com.czblood.common.utils.StringUtils;
import com.czblood.common.utils.spring.SpringUtils;
import java.util.Collection;
import java.util.List;
/**
* 参数缓存

View File

@ -1,10 +1,12 @@
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.*;
import com.czblood.bus.pojo.inter.HisUsePasswordRequest;
import com.czblood.bus.pojo.xtwh.XkBloodBreed;
import com.czblood.bus.pojo.xtwh.XkDmzd;
import com.czblood.bus.pojo.xtwh.XkXtwhIllDiagnose;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.bus.utils.BloodInterfaceUtil;
import com.czblood.common.core.controller.BaseController;

View File

@ -1,7 +1,9 @@
package com.czblood.bus.mapper;
import java.math.BigDecimal;
import java.util.Map;
public interface BloodBankMapper {
void spProduceMaxvalue(Map<String,Object> map);
BigDecimal getApplyTransNum(String bloodBreed);
}

View File

@ -0,0 +1,7 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.xtwh.XkBloodApplyTrans;
public interface XkBloodApplyTransMapper {
XkBloodApplyTrans queryOne(String blood_breed);
}

View File

@ -1,9 +1,10 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkBloodBreed;
import com.czblood.bus.pojo.xtwh.XkBloodBreed;
import java.util.List;
public interface XkBloodBreedMapper {
List<XkBloodBreed> queryList(XkBloodBreed xkBloodBreed);
XkBloodBreed queryOne(String breed_code);
}

View File

@ -1,6 +1,6 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkDmzd;
import com.czblood.bus.pojo.xtwh.XkDmzd;
import java.util.List;

View File

@ -1,6 +1,6 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkHosInfo;
import com.czblood.bus.pojo.xtwh.XkHosInfo;
import java.util.List;

View File

@ -1,6 +1,6 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkParameter;
import com.czblood.bus.pojo.xtwh.XkParameter;
public interface XkParameterMapper {
XkParameter queryOne(String parameter_code);

View File

@ -0,0 +1,7 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkTransfuseApplyApproval;
public interface XkTransfuseApplyApprovalMapper {
XkTransfuseApplyApproval queryOneByBillNo(String billNo);
}

View File

@ -1,6 +1,6 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkXtwhIllDiagnose;
import com.czblood.bus.pojo.xtwh.XkXtwhIllDiagnose;
import java.util.List;

View File

@ -1,6 +1,6 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkXtwhIll;
import com.czblood.bus.pojo.xtwh.XkXtwhIll;
import java.util.List;

View File

@ -30,4 +30,6 @@ public class XkTransfuseApplyCausalis {
private String Upload_Flag;
@ApiModelProperty("备注说明")
private String Explain;
@ApiModelProperty("实际值")
private String testValue;
}

View File

@ -0,0 +1,22 @@
package com.czblood.bus.pojo.xtwh;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class XkBloodApplyTrans {
private String SID;
private String Blood_Breed;
private BigDecimal Capacity;
private String Unit;
private BigDecimal ApplyNum;
private String Unit2;
private String Flag;
private String Blood_Kind;
}

View File

@ -1,4 +1,4 @@
package com.czblood.bus.pojo;
package com.czblood.bus.pojo.xtwh;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

View File

@ -1,4 +1,4 @@
package com.czblood.bus.pojo;
package com.czblood.bus.pojo.xtwh;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

View File

@ -1,8 +1,7 @@
package com.czblood.bus.pojo;
package com.czblood.bus.pojo.xtwh;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

View File

@ -1,4 +1,4 @@
package com.czblood.bus.pojo;
package com.czblood.bus.pojo.xtwh;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;

View File

@ -1,4 +1,4 @@
package com.czblood.bus.pojo;
package com.czblood.bus.pojo.xtwh;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;

View File

@ -1,4 +1,4 @@
package com.czblood.bus.pojo;
package com.czblood.bus.pojo.xtwh;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;

View File

@ -2,8 +2,8 @@ package com.czblood.bus.system;
import com.czblood.bus.mapper.XkHosInfoMapper;
import com.czblood.bus.mapper.XkOperatorInfoMapper;
import com.czblood.bus.pojo.XkDmzd;
import com.czblood.bus.pojo.XkHosInfo;
import com.czblood.bus.pojo.xtwh.XkDmzd;
import com.czblood.bus.pojo.xtwh.XkHosInfo;
import com.czblood.bus.pojo.XkOperatorInfo;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.common.core.domain.Result;
@ -13,11 +13,9 @@ import com.czblood.common.core.domain.entity.SysUser;
import com.czblood.common.core.domain.model.LoginParam;
import com.czblood.common.core.domain.model.LoginUser;
import com.czblood.common.utils.SecurityUtils;
import com.czblood.common.utils.StringUtils;
import com.czblood.system.mapper.SysDeptMapper;
import com.czblood.system.mapper.SysUserMapper;
import com.czblood.system.service.ExtSystemInterface;
import com.czblood.system.service.ISysConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

View File

@ -1,7 +1,7 @@
package com.czblood.bus.system;
import com.czblood.bus.mapper.XkDmzdMapper;
import com.czblood.bus.pojo.XkDmzd;
import com.czblood.bus.pojo.xtwh.XkDmzd;
import com.czblood.common.core.domain.entity.SysDept;
import com.czblood.system.mapper.SysDeptMapper;
import com.czblood.system.service.impl.SysDeptServiceImpl;

View File

@ -4,21 +4,18 @@ package com.czblood.bus.utils;
import cn.hutool.core.date.DateUtil;
import com.czblood.bus.cache.DmzdCache;
import com.czblood.bus.cache.OptionCache;
import com.czblood.bus.mapper.BloodBankMapper;
import com.czblood.bus.mapper.XkBloodBreedMapper;
import com.czblood.bus.mapper.XkDmzdMapper;
import com.czblood.bus.mapper.XkParameterMapper;
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.bus.mapper.*;
import com.czblood.bus.pojo.xtwh.XkBloodBreed;
import com.czblood.bus.pojo.xtwh.XkDmzd;
import com.czblood.bus.pojo.xtwh.XkParameter;
import com.czblood.common.core.domain.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;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@ -40,6 +37,8 @@ public class BloodBankUtil {
XkBloodBreedMapper xkBloodBreedMapper;
@Resource
SysUserMapper sysUserMapper;
@Resource
XkBloodApplyTransMapper xkBloodApplyTransMapper;
/**
@ -73,6 +72,17 @@ public class BloodBankUtil {
}
}
public XkDmzd getDictCacheOneByName(String dictType,String dictName){
List<XkDmzd> dictCache = getDictCache(dictType);
if(dictCache == null || dictCache.isEmpty()) return null;
List<XkDmzd> collect = dictCache.stream().filter(xkDmzd -> xkDmzd.getWordbook_name().equals(dictName)).collect(Collectors.toList());
if(collect.size() > 0) {
return collect.get(0);
}else{
return null;
}
}
/**
* 设置字典缓存
@ -150,4 +160,10 @@ public class BloodBankUtil {
return sysUserMapper.selectUserByUserName(userId);
}
public BigDecimal getApplyTransNum(String bloodBreed,BigDecimal applyNum){
BigDecimal applyTransNum = bloodBankMapper.getApplyTransNum(bloodBreed);
//计算结果保留 2 位小数,采用四舍五入规则。
return applyNum.divide(applyTransNum,2, RoundingMode.HALF_UP);
}
}

View File

@ -5,4 +5,7 @@
<select id="spProduceMaxvalue" parameterType="map" statementType="CALLABLE" useCache="false">
{call sp_produce_maxvalue(#{returncode,mode=OUT,jdbcType=INTEGER})}
</select>
<select id="getApplyTransNum" resultType="java.math.BigDecimal">
select Capacity*ApplyNum from xk_blood_apply_trans where blood_breed = #{blood_breed}
</select>
</mapper>

View File

@ -0,0 +1,9 @@
<?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.XkBloodApplyTransMapper">
<select id="queryOne" resultType="com.czblood.bus.pojo.xtwh.XkBloodApplyTrans">
select * from xk_blood_apply_trans where blood_breed = #{blood_breed}
</select>
</mapper>

View File

@ -0,0 +1,9 @@
<?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.XkTransfuseApplyApprovalMapper">
<select id="queryOneByBillNo" resultType="com.czblood.bus.pojo.XkTransfuseApplyApproval">
select * from xk_transfuse_apply_approval where bill_no = #{billNo}
</select>
</mapper>

View File

@ -2,8 +2,11 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.czblood.bus.mapper.XkBloodBreedMapper">
<select id="queryList" resultType="com.czblood.bus.pojo.XkBloodBreed">
<select id="queryList" resultType="com.czblood.bus.pojo.xtwh.XkBloodBreed">
select * from xk_blood_breed where use_sign = 'Y'
<if test="breed_code != null and breed_code != ''">and breed_code = #{breed_code}</if>
</select>
<select id="queryOne" resultType="com.czblood.bus.pojo.xtwh.XkBloodBreed">
select * from xk_blood_breed where breed_code = #{breed_code}
</select>
</mapper>

View File

@ -20,7 +20,7 @@
delete from xk_dmzd where wordbook_sign = #{wordbook_sign} and wordbook_code=#{wordbook_code}
</delete>
<select id="queryList" resultType="com.czblood.bus.pojo.XkDmzd">
<select id="queryList" resultType="com.czblood.bus.pojo.xtwh.XkDmzd">
select * from xk_dmzd where wordbook_sign=#{wordbook_sign}
<if test="use_sign != null and use_sign != ''">and use_sign = #{use_sign}</if>
<if test="wordbook_name != null and wordbook_name != ''">and wordbook_name like '%'+#{wordbook_name}+'%'</if>

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.czblood.bus.mapper.XkHosInfoMapper">
<select id="queryList" resultType="com.czblood.bus.pojo.XkHosInfo">
<select id="queryList" resultType="com.czblood.bus.pojo.xtwh.XkHosInfo">
select * from xk_hos_info
<where>
<if test="hospital_code != null and hospital_code != ''">and hospital_code = #{hospital_code}</if>
@ -10,7 +10,7 @@
</where>
</select>
<select id="queryOne" resultType="com.czblood.bus.pojo.XkHosInfo">
<select id="queryOne" resultType="com.czblood.bus.pojo.xtwh.XkHosInfo">
select * from xk_hos_info where hospital_code = #{hospital_code}
</select>

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.czblood.bus.mapper.XkParameterMapper">
<select id="queryOne" resultType="com.czblood.bus.pojo.XkParameter">
<select id="queryOne" resultType="com.czblood.bus.pojo.xtwh.XkParameter">
select * from xk_parameter where parameter_code = #{parameter_code}
</select>
</mapper>

View File

@ -3,7 +3,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.czblood.bus.mapper.XkXtwhIllDiagnoseMapper">
<select id="queryList" resultType="com.czblood.bus.pojo.XkXtwhIllDiagnose">
<select id="queryList" resultType="com.czblood.bus.pojo.xtwh.XkXtwhIllDiagnose">
select * from xk_xtwh_ill_diagnose
<where>
<if test="Ill_Code != null and Ill_Code != ''">Ill_Code = #{Ill_Code}</if>

View File

@ -3,7 +3,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.czblood.bus.mapper.XkXtwhIllMapper">
<select id="queryList" resultType="com.czblood.bus.pojo.XkXtwhIll">
<select id="queryList" resultType="com.czblood.bus.pojo.xtwh.XkXtwhIll">
select * from xk_xtwh_ill
<where>
<if test="Ill_Code != null and Ill_Code != ''">and Ill_Code = #{Ill_Code}</if>

View File

@ -4,7 +4,7 @@ package com.czblood.busBloodbank.controller;
import com.czblood.bus.cache.DmzdCache;
import com.czblood.bus.constants.BloodSysLogConstants;
import com.czblood.bus.mapper.XkDmzdMapper;
import com.czblood.bus.pojo.XkDmzd;
import com.czblood.bus.pojo.xtwh.XkDmzd;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.common.annotation.Log;
import com.czblood.common.core.controller.BaseController;

View File

@ -2,7 +2,7 @@ package com.czblood.busBloodbank.controller;
import com.czblood.bus.constants.BloodSysLogConstants;
import com.czblood.bus.mapper.XkHosInfoMapper;
import com.czblood.bus.pojo.XkHosInfo;
import com.czblood.bus.pojo.xtwh.XkHosInfo;
import com.czblood.common.annotation.Log;
import com.czblood.common.core.domain.Result;
import com.czblood.common.enums.BusinessType;

View File

@ -1,6 +1,6 @@
package com.czblood.busBloodbank.controller;
import com.czblood.bus.pojo.XkXtwhIll;
import com.czblood.bus.pojo.xtwh.XkXtwhIll;
import com.czblood.busBloodbank.service.XkXtwhIllService;
import com.czblood.common.core.domain.Result;
import io.swagger.annotations.Api;

View File

@ -1,6 +1,6 @@
package com.czblood.busBloodbank.service;
import com.czblood.bus.pojo.XkXtwhIll;
import com.czblood.bus.pojo.xtwh.XkXtwhIll;
import com.czblood.common.core.domain.Result;
public interface XkXtwhIllService {

View File

@ -1,7 +1,7 @@
package com.czblood.busBloodbank.service.impl;
import com.czblood.bus.mapper.XkXtwhIllMapper;
import com.czblood.bus.pojo.XkXtwhIll;
import com.czblood.bus.pojo.xtwh.XkXtwhIll;
import com.czblood.busBloodbank.service.XkXtwhIllService;
import com.czblood.common.core.domain.Result;
import org.springframework.stereotype.Service;

View File

@ -3,9 +3,10 @@ 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;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -16,4 +17,5 @@ public interface TransfuseApplyMapper {
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);
BigDecimal queryApplyTransTotalNum(@Param("beinhos_id") String beinhos_id,@Param("stime") Date stime, @Param("etime") Date etime,@Param("bloodKindList") List<String> bloodKindList,@Param("billNo") String billNo);
}

View File

@ -2,10 +2,9 @@ package com.czblood.busDoctor.service.impl;
import com.czblood.bus.mapper.*;
import com.czblood.bus.pojo.*;
import com.czblood.bus.pojo.xtwh.XkDmzd;
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;
@ -18,7 +17,6 @@ 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;
@ -45,6 +43,8 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
XkTransfuseApplyCausalisMapper xkTransfuseApplyCausalisMapper;
@Resource
TransfuseApplyUtil transfuseApplyUtil;
@Resource
XkTransfuseApplyApprovalMapper xkTransfuseApplyApprovalMapper;
/**
* 获取病人信息
@ -256,9 +256,25 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
*/
@Override
public Result saveApplyInfo(TransfuseApplyDTO transfuseApplyDTO) {
//前置校验
//产生申请单编号
TransfuseApplyInfoOne transfuseApplyInfoOne = transfuseApplyDTO.getTransfuseApplyInfoOne();
String billNo = transfuseApplyInfoOne.getBill_no();
//校验是否是大量用血
if(billNo != null){
//有申请单编号,说明是修改数据,如果之前有记录,直接返回数据给前端
XkTransfuseApplyApproval xkTransfuseApplyApproval = xkTransfuseApplyApprovalMapper.queryOneByBillNo(billNo);
if(xkTransfuseApplyApproval != null){
String applyLevel = xkTransfuseApplyApproval.getApplyLevel();
if(applyLevel.equals("2")) return new Result("-1","申请用血量≥800ml,需科主任进入临床用血(大量用血审批)页面核准!");
if(applyLevel.equals("3")) return new Result("-1","申请用血量≥1600ml,需科主任进入临床用血(大量用血审批)页面核准后,再报医务部门在临床用血(大量用血审批)批准!");
}
//修改数据,保存申请单数据
}
//新增数据,判断大量用血申请
Result result = transfuseApplyUtil.computeLargeBlood(transfuseApplyDTO);
if(!result.getCode().equals("0")) return result;
//产生申请单编号
//保存数据
return null;
}
@ -271,12 +287,26 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
@Override
public Result checkCausalis(TransfuseApplyDTO transfuseApplyDTO) {
//输血指征处理
TransfuseApplyInfoOne transfuseApplyInfoOne = transfuseApplyDTO.getTransfuseApplyInfoOne();
if(!StringUtils.isEmpty(transfuseApplyInfoOne.getBill_no())){
//如果申请单编号不是空的,说明是修改数据,如果之前有数据,则返回之前的数据,没有标识校验通过
List<XkTransfuseApplyCausalis> xkTransfuseApplyCausalisList = transfuseApplyDTO.getXkTransfuseApplyCausalisList();
if(xkTransfuseApplyCausalisList.isEmpty()){
return new Result("0","校验通过!");
}else{
return new Result("1","校验失败!",xkTransfuseApplyCausalisList);
}
}
//输血指征是否输血合理,校验是否符合输血指征的规则
//他原来的逻辑,分单据类型了,没搞懂为啥分,先统一校验吧
return transfuseApplyUtil.checkCausalis(transfuseApplyDTO);
// if(result.getCode().equals("1")){
// List<TransfuseApplyCausalisSetDTO> xkCausalisSetRetList = (List<TransfuseApplyCausalisSetDTO>)result.getData();
// }
Result result = transfuseApplyUtil.checkCausalis(transfuseApplyDTO);
if(result.getCode().equals("0")) return result;
if(result.getCode().equals("1")){
List<XkTransfuseApplyCausalis> xkTransfuseApplyCausalisRetList = (List<XkTransfuseApplyCausalis>)result.getData();
return new Result("1","校验失败!",xkTransfuseApplyCausalisRetList);
}
return new Result("0","校验通过!");
}
/**

View File

@ -1,20 +1,23 @@
package com.czblood.busDoctor.utils;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.czblood.bus.mapper.XkBloodBreedMapper;
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.pojo.*;
import com.czblood.bus.pojo.xtwh.XkBloodBreed;
import com.czblood.bus.pojo.xtwh.XkDmzd;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.busDoctor.pojo.DTO.TransfuseApplyCausalisSetDTO;
import com.czblood.busDoctor.mapper.TransfuseApplyMapper;
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.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@Component
@ -22,11 +25,71 @@ public class TransfuseApplyUtil {
@Resource
XkCausalisSetMapper xkCausalisSetMapper;
@Resource
BloodBankUtil bloodBankUtil;
@Resource
XkBloodBreedMapper xkBloodBreedMapper;
@Resource
TransfuseApplyMapper transfuseApplyMapper;
/**
* 计算大量用血
*/
public void computeLargeBlood(){
public Result computeLargeBlood(TransfuseApplyDTO transfuseApplyDTO){
TransfuseApplyInfoOne transfuseApplyInfoOne = transfuseApplyDTO.getTransfuseApplyInfoOne();
String beinhosId = transfuseApplyInfoOne.getBeinhos_id();
String billNo = transfuseApplyInfoOne.getBill_no();
String applyType = transfuseApplyInfoOne.getApply_type();
XkDmzd sqlxDmzd = bloodBankUtil.getDictCacheOneByName("sqlx", applyType);
String exp2 = sqlxDmzd.getExp2(); //是否是抢救用血
String applyLev = ""; //大量用血等级
String flag = ""; //通过标志
String msg = "";
Map<String,Object> map = new HashMap<>();
//抢救用血不参与大量用血计算
if(BloodBankUtil.isBank(exp2).equals("Y")) return new Result("0","抢救用血不参与大量用血计算");
//血液品种是否参与大量用血判断
BigDecimal totalApplyNum = BigDecimal.ZERO;
List<String> bloodKindList = new ArrayList<>();
List<XkTransfuseApplyBloodbreed> xkTransfuseApplyBloodbreedList = transfuseApplyDTO.getXkTransfuseApplyBloodbreedList();
for (XkTransfuseApplyBloodbreed xkTransfuseApplyBloodbreed : xkTransfuseApplyBloodbreedList) {
String bloodBreed = xkTransfuseApplyBloodbreed.getBlood_breed();
BigDecimal bloodNum = xkTransfuseApplyBloodbreed.getBlood_num();
XkBloodBreed xkBloodBreed = xkBloodBreedMapper.queryOne(bloodBreed);
XkDmzd xylxDmzd = bloodBankUtil.getDictCacheOneByName("xylx", xkBloodBreed.getBlood_kind());
String exp1 = xylxDmzd.getExp1(); //是否参与大量用血计算
if(!BloodBankUtil.isBank(exp1).equals("Y")) continue;
BigDecimal applyTransNum = bloodBankUtil.getApplyTransNum(bloodBreed,bloodNum);
totalApplyNum = totalApplyNum.add(applyTransNum);
bloodKindList.add(xkBloodBreed.getBlood_kind());
}
Date currentTimeDate = bloodBankUtil.getCurrentTimeDate();
DateTime yesterday = DateUtil.offsetDay(currentTimeDate, -1);
//其中不包含了当前申请单的输血量
BigDecimal beforeNum = transfuseApplyMapper.queryApplyTransTotalNum(beinhosId, yesterday, currentTimeDate, bloodKindList,billNo);
//大量用血判断
BigDecimal largeBloodNum = totalApplyNum.add(beforeNum).abs();
if(largeBloodNum.compareTo(new BigDecimal(800)) < 0){
applyLev = "1";
flag = "Y";
}else if(largeBloodNum.compareTo(new BigDecimal(800)) >= 0 && largeBloodNum.compareTo(new BigDecimal(1600)) < 0){
applyLev = "2";
flag = "N";
msg = "申请用血量≥800ml,需科主任进入临床用血(大量用血审批)页面核准!";
}else{
applyLev = "3";
flag = "N";
msg = "申请用血量≥1600ml,需科主任进入临床用血(大量用血审批)页面核准后,再报医务部门在临床用血(大量用血审批)批准!";
}
map.put("applyLev",applyLev);
map.put("flag",flag);
if(flag.equals("N")){
return new Result("1",msg,map);
}else{
//校验通过
return new Result("0",msg,map);
}
}
@ -42,13 +105,13 @@ public class TransfuseApplyUtil {
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<>();
List<XkTransfuseApplyCausalis> xkTransfuseApplyCausalisList = new ArrayList<>();
int i = 0;
//这个返回也是原来的逻辑
if(beinhosId.equals("") || deptType.equals("") || useType.equals("") ) return new Result("0","字段没有填完整,无法校验!");
List<XkTransfuseApplyTestitem> xkTransfuseApplyTestitemList = transfuseApplyDTO.getXkTransfuseApplyTestitemList();
@ -63,23 +126,28 @@ public class TransfuseApplyUtil {
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);
//没有校验通过的,增加数据,让前台界面显示
XkTransfuseApplyCausalis xkTransfuseApplyCausalis = new XkTransfuseApplyCausalis();
xkTransfuseApplyCausalis.setSID(i++);
xkTransfuseApplyCausalis.setCausalis_Code(xkCausalisSet.getCausalis_Code());
xkTransfuseApplyCausalis.setCausalis_Name(xkCausalisSet.getCausalis_Name());
xkTransfuseApplyCausalis.setCausalis_Result(xkCausalisSet.getCausalis_Result());
xkTransfuseApplyCausalis.setUse_Flag("Y");
xkTransfuseApplyCausalis.setUpload_Flag("N");
xkTransfuseApplyCausalis.setExplain("");
xkTransfuseApplyCausalisList.add(xkTransfuseApplyCausalis);
}
}
}
if(xkCausalisSetRetList.isEmpty()){
if(xkTransfuseApplyCausalisList.isEmpty()){
return new Result("0","校验成功!");
}else{
return new Result("1","校验失败",xkCausalisSetRetList);
return new Result("1","校验失败",xkTransfuseApplyCausalisList);
}
}
public XkCausalisSet calcCausalis(List<XkCausalisSet> xkCausalisSetList, String proName,String testValue){
private 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;
@ -157,4 +225,13 @@ public class TransfuseApplyUtil {
return null;
}
/**
* 产生单据编号
* @param billType
* @return
*/
public String produceBillNo(String billType){
return null;
}
}

View File

@ -155,4 +155,21 @@
group by xk_blood_breed.breed_name,xk_blood_info.unit
</select>
<select id="queryApplyTransTotalNum" resultType="java.math.BigDecimal">
SELECT sum ( t.blood_num / b.capacity *b.applynum ) rl_qc
FROM xk_transfuse_apply a , xk_blood_apply_trans b , xk_transfuse_apply_bloodbreed t , xk_blood_breed k
WHERE a.beinhos_id = #{beinhos_id} AND
a.Bill_No =t.Bill_No AND
k.blood_kind =b.blood_breed AND
t.blood_breed =k.breed_code AND
<![CDATA[a.bill_stasus <> 'Z' and]]>
a.apply_date Between #{stime} AND #{etime}
<if test="billNo != null and billNo != ''"><![CDATA[and a.bill_no <> #{billNo}]]></if>
<if test="bloodKindList != null and bloodKindList.size() > 0">
and k.blood_kind in
<foreach collection="bloodKindList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
</select>
</mapper>

View File

@ -468,3 +468,16 @@ IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_parameter'
ALTER TABLE xk_parameter ADD CONSTRAINT PK_xk_parameter PRIMARY KEY CLUSTERED (parameter_code);
END
GO
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_transfuse_apply_approval' AND type = 'PK' )
BEGIN
ALTER TABLE xk_transfuse_apply_approval ADD CONSTRAINT PK_xk_transfuse_apply_approval PRIMARY KEY CLUSTERED (bill_no);
END
GO
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_blood_apply_trans' AND type = 'PK' )
BEGIN
ALTER TABLE xk_blood_apply_trans ADD CONSTRAINT PK_xk_blood_apply_trans PRIMARY KEY CLUSTERED (blood_breed,sid);
END
GO