大量用血审批界面,输血申请审核

This commit is contained in:
jiangs 2026-07-17 10:20:29 +08:00
parent 62574d4647
commit 7146172d54
13 changed files with 284 additions and 28 deletions

View File

@ -8,4 +8,5 @@ public class BloodSysLogConstants {
public static final String LOG_TYPE_YLJG = "医疗机构";
public static final String LOG_TYPE_DMZD = "代码字典";
public static final String LOG_TYPE_TRANSFUSE_APPLY = "输血申请";
public static final String LOG_TYPE_TRANSFUSE_APPLY_APPROVAL = "输血审批";
}

View File

@ -9,7 +9,9 @@ import com.czblood.common.core.controller.BaseController;
import com.czblood.common.core.domain.Result;
import com.czblood.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@ -69,7 +71,7 @@ public class TransfuseApplyBeforeController extends BaseController {
@ApiOperation("打印单据")
@GetMapping("/print")
public Result print(String billNo,String templateName){
public Result print(@ApiParam(value = "单据编号", required = true) String billNo,@ApiParam(value = "模板名称:ASSESS_BEFORE(输血前评估单),INFORMED_CONSENT(知情同意书),LARGE_APPLY(大量用血审批单)", required = true) String templateName){
return transfuseApplyBeforeService.print(billNo,templateName);
}
}

View File

@ -2,10 +2,12 @@ package com.czblood.busDoctor.controller;
import com.czblood.busDoctor.mapper.TransfuseApplyHistoryMapper;
import com.czblood.busDoctor.pojo.VO.TransfuseApplyHistoryVO;
import com.czblood.common.core.domain.Result;
import com.czblood.common.core.controller.BaseController;
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;
@ -17,16 +19,17 @@ import java.util.Map;
@RestController
@RequestMapping("/bus/doctor/history")
@Slf4j
public class TransfuseApplyHistoryController {
public class TransfuseApplyHistoryController extends BaseController {
@Resource
private TransfuseApplyHistoryMapper transfuseApplyHistoryMapper;
@ApiOperation("查询输血申请历史列表")
@RequestMapping("/queryList")
public Result queryList(TransfuseApplyHistoryVO transfuseApplyHistoryVO){
@GetMapping("/queryList")
public TableDataInfo queryList(TransfuseApplyHistoryVO transfuseApplyHistoryVO){
startPage();
List<Map<String,Object>> list = transfuseApplyHistoryMapper.queryList(transfuseApplyHistoryVO);
return new Result("0","查询成功!",list);
return getDataTable(list);
}
}

View File

@ -0,0 +1,48 @@
package com.czblood.busDoctor.controller;
import com.czblood.bus.constants.BloodSysLogConstants;
import com.czblood.busDoctor.pojo.VO.TransfuseApprovalVO;
import com.czblood.busDoctor.service.TransfuseApprovalService;
import com.czblood.common.annotation.Log;
import com.czblood.common.core.controller.BaseController;
import com.czblood.common.core.domain.Result;
import com.czblood.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@Api(tags = "大量用血审批")
@RestController
@RequestMapping("/bus/doctor/approval")
@Slf4j
public class TransfuseApprovalController extends BaseController {
@Resource
private TransfuseApprovalService transfuseApprovalService;
@ApiOperation("查询大量用血审批列表")
@PostMapping("/queryList")
public Result queryList(@RequestBody TransfuseApprovalVO transfuseApprovalVO){
return transfuseApprovalService.queryList(transfuseApprovalVO);
}
@Log(title = BloodSysLogConstants.LOG_TYPE_TRANSFUSE_APPLY_APPROVAL, businessType = BusinessType.CHECK)
@ApiOperation("科主任审批")
@GetMapping("/auditArchiater")
public Result auditArchiater(String billNo){
String username = getUsername();
return transfuseApprovalService.auditArchiater(billNo,username);
}
@Log(title = BloodSysLogConstants.LOG_TYPE_TRANSFUSE_APPLY_APPROVAL, businessType = BusinessType.CHECK_MEDIC)
@ApiOperation("医务部审批")
@GetMapping("/auditMedical")
public Result auditMedical(String billNo){
String username = getUsername();
return transfuseApprovalService.auditMedical(billNo,username);
}
}

View File

@ -0,0 +1,11 @@
package com.czblood.busDoctor.mapper;
import com.czblood.busDoctor.pojo.VO.TransfuseApprovalVO;
import java.util.List;
import java.util.Map;
public interface TransfuseApprovalMapper {
List<Map<String,Object>> queryList(TransfuseApprovalVO transfuseApprovalVO);
}

View File

@ -0,0 +1,17 @@
package com.czblood.busDoctor.pojo.VO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TransfuseApprovalVO {
private String stime;
private String etime;
private String billNo;
private String beinhos_id;
private String dept;
private String flag;
}

View File

@ -0,0 +1,12 @@
package com.czblood.busDoctor.service;
import com.czblood.busDoctor.pojo.VO.TransfuseApprovalVO;
import com.czblood.common.core.domain.Result;
public interface TransfuseApprovalService {
Result queryList(TransfuseApprovalVO transfuseApprovalVO);
Result auditArchiater(String billNo,String username);
Result auditMedical(String billNo, String username);
}

View File

@ -215,11 +215,11 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
//开启职称校验
if(sfsyzckz.equals("Y")){
//申请单的申请医生
Result result = checkZC(xkTransfuseApply.getApply_medic());
Result result = transfuseApplyUtil.checkZC(xkTransfuseApply.getApply_medic());
if(!result.getCode().equals("0")) return result;
if(Integer.parseInt(result.getData().toString()) < 2) return new Result("-1","申请医师必须具备中级或以上职称,录入的申请医师不具备该职称。");
//申请单的上级医师
Result result1 = checkZC(xkTransfuseApply.getTreat_medic());
Result result1 = transfuseApplyUtil.checkZC(xkTransfuseApply.getTreat_medic());
if(!result1.getCode().equals("0")) return result1;
if(Integer.parseInt(result1.getData().toString()) < 3) return new Result("-1","上级医师必须具备高级职称,录入的上级医师不具备该职称。");
XkProTransfuseProject xkProTransfuseProject = new XkProTransfuseProject();
@ -237,8 +237,10 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
String agreementInk = BloodBankUtil.isBank(xkTransfuseApply.getAgreement_ink());
if(!agreementInk.equals("Y")) return new Result("-1","请先签署输血知情同意书!");
String intent = BloodBankUtil.isBank(xkTransfuseApply.getIntent());
if(intent.equals("")) return new Result("-1","请填写输血目的!");
for (XkTransfuseApplyBloodbreed xkTransfuseApplyBloodbreed : xkTransfuseApplyBloodbreedList) {
String intent = BloodBankUtil.isBank(xkTransfuseApplyBloodbreed.getIntent());
if(intent.equals("")) return new Result("-1","请填写输血目的!");
}
for (XkTransfuseApplyBloodbreed xkTransfuseApplyBloodbreed : xkTransfuseApplyBloodbreedList) {
String bloodBreed = xkTransfuseApplyBloodbreed.getBlood_breed();
@ -645,16 +647,4 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
return BloodInterfaceUtil.invokeBloodInterface(invokeHisEmrRequest);
}
/**
* 校验医生职称是否符合要求
* @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

@ -0,0 +1,117 @@
package com.czblood.busDoctor.service.impl;
import com.czblood.bus.mapper.XkTransfuseApplyApprovalMapper;
import com.czblood.bus.mapper.XkTransfuseApplyMapper;
import com.czblood.bus.pojo.XkTransfuseApply;
import com.czblood.bus.pojo.XkTransfuseApplyApproval;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.busDoctor.mapper.TransfuseApprovalMapper;
import com.czblood.busDoctor.pojo.VO.TransfuseApprovalVO;
import com.czblood.busDoctor.service.TransfuseApprovalService;
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.spring.SpringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Service
@Slf4j
public class TransfuseApprovalServiceImpl implements TransfuseApprovalService {
@Resource
private TransfuseApprovalMapper transfuseApprovalMapper;
@Resource
TransfuseApplyUtil transfuseApplyUtil;
@Resource
XkTransfuseApplyApprovalMapper xkTransfuseApplyApprovalMapper;
@Autowired
private BloodBankUtil bloodBankUtil;
@Resource
XkTransfuseApplyMapper xkTransfuseApplyMapper;
@Override
public Result queryList(TransfuseApprovalVO transfuseApprovalVO) {
List<Map<String,Object>> xkTransfuseApplyApprovalList = transfuseApprovalMapper.queryList(transfuseApprovalVO);
return new Result("0","查询成功",xkTransfuseApplyApprovalList);
}
/**
* 科主任审核
* @param billNo
* @param username
* @return
*/
@Override
public Result auditArchiater(String billNo,String username) {
if(billNo == null || billNo.equals("")) return new Result("-1","申请单号不能为空");
Result result = transfuseApplyUtil.checkZC(username);
if(!result.getCode().equals("0")) return result;
if(Integer.parseInt(result.getData().toString()) < 3) return new Result("-1","上级医师必须具备高级职称,录入的上级医师不具备该职称。");
XkTransfuseApplyApproval xkTransfuseApplyApproval = xkTransfuseApplyApprovalMapper.queryOneByBillNo(billNo);
if(xkTransfuseApplyApproval == null) return new Result("-1","选择的申请单不存在!");
String applyLevel = xkTransfuseApplyApproval.getApplyLevel();
String flag = xkTransfuseApplyApproval.getFlag();
if(applyLevel.equals("2") && flag.equals("Y")) return new Result("1","该申请单已进行科主任核准!");
Date currentTimeDate = bloodBankUtil.getCurrentTimeDate();
XkTransfuseApplyApproval xkTransfuseApplyApprovalTemp = new XkTransfuseApplyApproval();
xkTransfuseApplyApprovalTemp.setBill_No(billNo);
xkTransfuseApplyApprovalTemp.setArchiater( username);
xkTransfuseApplyApprovalTemp.setArchiater_CheckTime(currentTimeDate);
xkTransfuseApplyApprovalTemp.setFlag("Y");
XkTransfuseApply xkTransfuseApplyTemp = new XkTransfuseApply();
xkTransfuseApplyTemp.setBill_no(billNo);
xkTransfuseApplyTemp.setBank_director( username);
SpringUtils.getBean(TransfuseApprovalServiceImpl.class).updateAudit(xkTransfuseApplyApprovalTemp,xkTransfuseApplyTemp);
return new Result("0","审核成功!");
}
/**
* 医务部审核
* @param billNo
* @param username
* @return
*/
@Override
public Result auditMedical(String billNo, String username) {
if(billNo == null || billNo.equals("")) return new Result("-1","申请单号不能为空");
//使用该控制进行输血审核时, 设置医务科科室ID
String sfsywb = bloodBankUtil.getParameterValue("SFSYWB");
XkTransfuseApplyApproval xkTransfuseApplyApproval = xkTransfuseApplyApprovalMapper.queryOneByBillNo(billNo);
SysUser userInfo = bloodBankUtil.getUserInfo(username);
String deptCode = userInfo.getDept().getDeptCode();
if(!deptCode.equals(sfsywb)) return new Result("-1","当前用户非医务科人员,不能进行输血审核!");
String medicalDept = BloodBankUtil.isBank(xkTransfuseApplyApproval.getMedical_Dept());
String archiater = xkTransfuseApplyApproval.getArchiater();
if(archiater == null || archiater.equals("")) return new Result("-1","该申请单没有进行科主任审核,请先进行科主任审核!!");
if(!medicalDept.equals("")) return new Result("-1","该申请单已进行医务部审核,无需重复审核!");
Date currentTimeDate = bloodBankUtil.getCurrentTimeDate();
XkTransfuseApplyApproval xkTransfuseApplyApprovalTemp = new XkTransfuseApplyApproval();
xkTransfuseApplyApprovalTemp.setBill_No(billNo);
xkTransfuseApplyApprovalTemp.setMedical_Dept(username);
xkTransfuseApplyApprovalTemp.setMedical_CheckTime(currentTimeDate);
xkTransfuseApplyApprovalTemp.setFlag("Y");
XkTransfuseApply xkTransfuseApplyTemp = new XkTransfuseApply();
xkTransfuseApplyTemp.setBill_no(billNo);
xkTransfuseApplyTemp.setMedical_affairs(username);
SpringUtils.getBean(TransfuseApprovalServiceImpl.class).updateAudit(xkTransfuseApplyApprovalTemp,xkTransfuseApplyTemp);
return new Result("0","审核成功!");
}
@Transactional(rollbackFor = Exception.class)
public void updateAudit(XkTransfuseApplyApproval xkTransfuseApplyApproval, XkTransfuseApply xkTransfuseApply){
xkTransfuseApplyApprovalMapper.update(xkTransfuseApplyApproval);
xkTransfuseApplyMapper.update(xkTransfuseApply);
}
}

View File

@ -23,7 +23,7 @@ public class TransfuseApplyBeforeUtil {
@Resource
XkTransfuseApplyTestitemMapper xkTransfuseApplyTestitemMapper;
@Transactional
@Transactional(rollbackFor = Exception.class)
public void saveTransfuseApplyBeforeDTO(TransfuseApplyBeforeDTO transfuseApplyBeforeDTO){
XkPatientInfo xkPatientInfo = transfuseApplyBeforeDTO.getXkPatientInfo();
String beinhosId = xkPatientInfo.getBeinhos_id();
@ -43,7 +43,7 @@ public class TransfuseApplyBeforeUtil {
}
@Transactional
@Transactional(rollbackFor = Exception.class)
public void updateTransfuseApplyBeforeDTO(TransfuseApplyBeforeDTO transfuseApplyBeforeDTO){
XkPatientInfo xkPatientInfo = transfuseApplyBeforeDTO.getXkPatientInfo();
xkPatientInfoMapper.updateXkPatientInfo(xkPatientInfo);

View File

@ -15,6 +15,7 @@ import com.czblood.busDoctor.pojo.DTO.TransfuseApplyInfoOne;
import com.czblood.busDoctor.pojo.DTO.XkTransfuseApplyCausalisDTO;
import com.czblood.busDoctor.pojo.VO.ExplainVO;
import com.czblood.common.core.domain.Result;
import com.czblood.common.core.domain.entity.SysUser;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@ -255,7 +256,7 @@ public class TransfuseApplyUtil {
return null;
}
@Transactional
@Transactional(rollbackFor = Exception.class)
public void saveTransfuseApply(TransfuseApplyDTO transfuseApplyDTO,boolean isNew){
TransfuseApplyInfoOne transfuseApplyInfoOne = transfuseApplyDTO.getTransfuseApplyInfoOne();
XkTransfuseApply xkTransfuseApply = transfuseApplyInfoOne.getXkTransfuseApply();
@ -332,10 +333,22 @@ public class TransfuseApplyUtil {
return sort;
}
@Transactional
@Transactional(rollbackFor = Exception.class)
public void saveCancelApply(XkTransfuseApply xkTransfuseApply){
String billNo = xkTransfuseApply.getBill_no();
xkTransfuseApplyMapper.update(xkTransfuseApply);
xkTransfuseApplyCausalisMapper.deleteByBillNo(billNo);
}
/**
* 校验医生职称是否符合要求
* @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

@ -40,7 +40,7 @@ public class TransfuseCheckExplainUtil {
@Resource
XkSampleInfoMapper xkSampleInfoMapper;
@Transactional
@Transactional(rollbackFor = Exception.class)
public void updateApplyStatus(XkTransfuseApply xkTransfuseApply,XkCheckBloodtype xkCheckBloodtype){
xkTransfuseApplyMapper.update(xkTransfuseApply);
if(xkCheckBloodtype != null){
@ -124,7 +124,7 @@ public class TransfuseCheckExplainUtil {
}
@Transactional
@Transactional(rollbackFor = Exception.class)
public void saveSampleData(XkSampleInfo xkSampleInfo, XkTransfuseApply xkTransfuseApply){
xkSampleInfoMapper.insert(xkSampleInfo);
xkTransfuseApplyMapper.update(xkTransfuseApply);

View File

@ -0,0 +1,42 @@
<?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.busDoctor.mapper.TransfuseApprovalMapper">
<select id="queryList" resultType="map">
SELECT xk_transfuse_apply.bill_no ,
xk_patient_info.beinhos_id ,
xk_patient_info.patient_name ,
xk_patient_info.patient_sex ,
xk_patient_info.age ,
xk_transfuse_apply.apply_date ,
xk_transfuse_apply.abo_type ,
xk_transfuse_apply.rh_type ,
isnull(xk_transfuse_apply.apply_medic,'') as apply_medic,
isnull(xk_transfuse_apply.attending_medic,'') as attending_medic,
xk_transfuse_apply_bloodbreed.blood_breed ,
xk_transfuse_apply_bloodbreed.blood_num ,
xk_transfuse_apply_bloodbreed.unit ,
isnull(xk_transfuse_apply.treat_medic,'') as treat_medic,
xk_transfuse_apply_approval.Archiater ,
xk_transfuse_apply_approval.Archiater_CheckTime ,
xk_transfuse_apply_approval.Medical_Dept ,
xk_transfuse_apply_approval.Medical_CheckTime ,
xk_transfuse_apply_approval.flag ,
xk_transfuse_apply.dept_id
FROM xk_transfuse_apply ,
xk_patient_info ,
xk_transfuse_apply_bloodbreed ,
xk_transfuse_apply_approval
WHERE ( xk_transfuse_apply.bill_no = xk_transfuse_apply_bloodbreed.bill_no ) and
( xk_transfuse_apply.beinhos_id = xk_patient_info.beinhos_id ) and
( xk_transfuse_apply.bill_no = xk_transfuse_apply_approval.Bill_No ) and
( xk_transfuse_apply.apply_date between #{stime} and #{etime} ) And
<if test="billNo != null and billNo != ''">( xk_transfuse_apply.bill_no = #{billNo} ) And</if>
<if test="beinhos_id != null and beinhos_id != ''">( xk_transfuse_apply.beinhos_id = #{beinhos_id} ) And</if>
<if test="flag != null and flag != ''">( xk_transfuse_apply_approval.Flag = #{flag} ) and</if>
xk_transfuse_apply_approval.applylevel in ('2','3')
<if test="dept != null and dept != ''">and xk_transfuse_apply.dept_id = #{dept}</if>
</select>
</mapper>