版本更新

This commit is contained in:
Zhang.WH
2025-09-03 15:54:41 +08:00
parent 0b93d16b64
commit 8f82322d10
3290 changed files with 154339 additions and 23829 deletions

View File

@@ -0,0 +1,23 @@
package com.openhis.medication.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.medication.domain.MedicationDefinition;
import com.openhis.medication.domain.MedicationDetail;
/**
* 药品定义管理Service接口
*
* @author system
* @date 2025-02-20
*/
public interface IMedicationDefinitionService extends IService<MedicationDefinition> {
/**
* 新增药品目录
*
* @param medicationDetail
* @return
*/
boolean addMedication(MedicationDetail medicationDetail);
}

View File

@@ -0,0 +1,85 @@
package com.openhis.medication.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.administration.domain.Practitioner;
import com.openhis.medication.domain.MedicationDispense;
import com.openhis.medication.domain.MedicationRequest;
import org.apache.ibatis.annotations.Param;
/**
* 药品发放管理Service接口
*
* @author system
* @date 2025-02-20
*/
public interface IMedicationDispenseService extends IService<MedicationDispense> {
/**
* 处理药品发放信息
*
* @param medicationRequest 药品请求信息
* @param dbOpType db操作类型
*/
void handleMedicationDispense(MedicationRequest medicationRequest, String dbOpType);
/**
* 删除药品发放信息
*
* @param medReqId 药品请求id
*/
void deleteMedicationDispense(Long medReqId);
/**
* 更新未发放药品状态:停止发放
*
* @param medDisIdList 发放id列表
* @param refund 停止原因:退费
*/
void updateStopDispenseStatus(List<Long> medDisIdList, Integer refund);
/**
* 更新药品状态:待配药
*
* @param medicationRequestIdList 请求id列表
*/
void updatePreparationDispenseStatus(List<Long> medicationRequestIdList);
/**
* 更新药品状态:暂停
*
* @param medReqIdList 请求id列表
*/
void updateOnHoldDispenseStatus(List<Long> medReqIdList);
/**
* 验证是否发过药
*
* @param medicationDefId 药品定义id
* @return 验证结果
*/
boolean verifyAbleEdit(Long medicationDefId);
/**
* 通过请求id获取药品发放信息
*
* @param requestIdList 请求id
* @return 发放信息
*/
List<MedicationDispense> selectByRequestIdList(List<Long> requestIdList);
/**
* 通过id获取药品发放信息
*
* @param idList 请求id
* @return 发放信息
*/
List<MedicationDispense> selectByIdList(@Param("idList") List<Long> idList);
/**
* 更新药品状态:已汇总
*
* @param medDispenseId 发放id列表
*/
void updateDispenseStatusSummarized(List<Long> medDispenseId);
}

View File

@@ -0,0 +1,44 @@
package com.openhis.medication.service;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.medication.domain.MedicationRequest;
/**
* 药品请求管理Service接口
*
* @author system
* @date 2025-02-20
*/
public interface IMedicationRequestService extends IService<MedicationRequest> {
/**
* 更新请求状态:已完成
*
* @param requestIdList 药品请求id列表
* @param practitionerId 校对人
* @param checkDate 校对时间
*/
void updateCompletedStatusBatch(List<Long> requestIdList, Long practitionerId, Date checkDate);
/**
* 更新请求状态:待发送
*
* @param requestIdList 药品请求id列表
* @param practitionerId 校对人
* @param checkDate 校对时间
*/
void updateDraftStatusBatch(List<Long> requestIdList, Long practitionerId, Date checkDate);
/**
* 通过id获取药品请求信息
*
* @param idList 请求id
* @return 发放信息
*/
List<MedicationRequest> selectByIdList(@Param("idList") List<Long> idList);
}

View File

@@ -0,0 +1,35 @@
package com.openhis.medication.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.medication.domain.Medication;
import com.openhis.medication.domain.MedicationDetail;
/**
* 药品基本信息管理Service接口
*
* @author system
* @date 2025-02-20
*/
public interface IMedicationService extends IService<Medication> {
/**
* 查询药品信息列表
*
* @param medicationIdList 药品id列表
* @return 药品信息列表
*/
List<Medication> getList(List<Long> medicationIdList);
/**
* 查询药品详细信息列表
*
* @return 药品详细信息列表
*/
List<MedicationDetail> getDetailList();
// 新增药品目录
boolean addMedication(MedicationDetail medicationDetail);
}

View File

@@ -0,0 +1,65 @@
package com.openhis.medication.service.impl;
import java.util.List;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.core.common.utils.bean.BeanUtils;
import com.openhis.medication.domain.MedicationDefinition;
import com.openhis.medication.domain.MedicationDetail;
import com.openhis.medication.mapper.MedicationDefinitionMapper;
import com.openhis.medication.service.IMedicationDefinitionService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* 药品定义管理Service业务层处理
*
* @author system
* @date 2025-02-20
*/
@Slf4j
@Service
@AllArgsConstructor
public class MedicationDefinitionServiceImpl extends ServiceImpl<MedicationDefinitionMapper, MedicationDefinition>
implements IMedicationDefinitionService {
private final MedicationDefinitionMapper medicationDefinitionMapper;
/**
* 新增药品目录
*
* @param medicationDetail
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean addMedication(MedicationDetail medicationDetail) {
MedicationDefinition medicationDefinition = new MedicationDefinition();
BeanUtils.copyProperties(medicationDetail, medicationDefinition);
// 根据药品编码判断药品是否存在
List<MedicationDefinition> medicationDefinitions =
medicationDefinitionMapper.selectList(new LambdaQueryWrapper<MedicationDefinition>()
.eq(MedicationDefinition::getBusNo, medicationDefinition.getBusNo()));
if (medicationDefinitions.size() > 0) {
return false;
}
// 新增药品目录
int insert = medicationDefinitionMapper.insert(medicationDefinition);
medicationDetail.setId(medicationDefinition.getId());
if (insert != 1) {
return false;
}
// 获取生成的主键值
Long generatedId = medicationDefinition.getId();
// 将生成的 ID 存储到子表中
medicationDetail.setMedicationDefId(generatedId);
return true;
}
}

View File

@@ -0,0 +1,209 @@
package com.openhis.medication.service.impl;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.openhis.common.enums.AssignSeqEnum;
import com.openhis.common.enums.DbOpType;
import com.openhis.common.enums.DelFlag;
import com.openhis.common.enums.DispenseStatus;
import com.openhis.medication.domain.MedicationDispense;
import com.openhis.medication.domain.MedicationRequest;
import com.openhis.medication.mapper.MedicationDispenseMapper;
import com.openhis.medication.service.IMedicationDispenseService;
/**
* 药品发放管理Service业务层处理
*
* @author system
* @date 2025-02-20
*/
@Service
public class MedicationDispenseServiceImpl extends ServiceImpl<MedicationDispenseMapper, MedicationDispense>
implements IMedicationDispenseService {
@Resource
AssignSeqUtil assignSeqUtil;
/**
* 处理药品发放信息
*
* @param medicationRequest 药品请求信息
* @param dbOpType db操作类型
*/
@Override
public void handleMedicationDispense(MedicationRequest medicationRequest, String dbOpType) {
MedicationDispense medicationDispense = new MedicationDispense();
// 药品发放id
medicationDispense.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_DIS_NO.getPrefix(), 4));
// 药品发放状态
medicationDispense.setStatusEnum(DispenseStatus.DRAFT.getValue());
// 状态变更时间
medicationDispense.setStatusChangedTime(DateUtils.getNowDate());
// 发药类型
medicationDispense.setDispenseEnum(medicationRequest.getCategoryEnum());
// 药品编码
medicationDispense.setMedicationId(medicationRequest.getMedicationId());
// 请求数量
medicationDispense.setQuantity(medicationRequest.getQuantity());
// 请求单位编码
medicationDispense.setUnitCode(medicationRequest.getUnitCode());
// 产品批号
medicationDispense.setLotNumber(medicationRequest.getLotNumber());
// 患者id
medicationDispense.setPatientId(medicationRequest.getPatientId());
// 就诊id
medicationDispense.setEncounterId(medicationRequest.getEncounterId());
// 支持用药信息
medicationDispense.setSupportInfo(medicationRequest.getSupportInfo());
// 发药人
medicationDispense.setPractitionerId(medicationRequest.getPractitionerId());
// 发放药房
medicationDispense.setLocationId(medicationRequest.getPerformLocation());
// 药品请求id
medicationDispense.setMedReqId(medicationRequest.getId());
// 已发药数量
medicationDispense.setDispenseQuantity(0);
// 用法
medicationDispense.setMethodCode(medicationRequest.getMethodCode());
// 用药频次
medicationDispense.setFrequencyCode(medicationRequest.getRateCode());
// 单次剂量
medicationDispense.setDose(medicationRequest.getDose());
// 剂量单位
medicationDispense.setDoseUnitCode(medicationRequest.getDoseUnitCode());
// 单次最大剂量
medicationDispense.setMaxUnit(medicationRequest.getMaxDose());
// 获取当前时间
LocalDateTime now = LocalDateTime.now();
// 增加2小时
LocalDateTime newTime = now.plusHours(2);
// 转换为Date对象如果需要保持使用Date类型
Date limitTime = Date.from(newTime.atZone(ZoneId.systemDefault()).toInstant());
// 设置限制发药时间
medicationDispense.setLimitTime(limitTime);
if (DbOpType.INSERT.getCode().equals(dbOpType)) {
baseMapper.insert(medicationDispense);
} else if (DbOpType.UPDATE.getCode().equals(dbOpType)) {
baseMapper.update(medicationDispense, new LambdaUpdateWrapper<MedicationDispense>()
.eq(MedicationDispense::getMedReqId, medicationRequest.getId()));
}
}
/**
* 删除药品发放信息
*
* @param medReqId 药品请求id
*/
@Override
public void deleteMedicationDispense(Long medReqId) {
baseMapper.delete(new LambdaQueryWrapper<MedicationDispense>().eq(MedicationDispense::getMedReqId, medReqId));
}
/**
* 更新未发放药品状态:停止发放
*
* @param medDisIdList 发放id列表
* @param refund 停止原因:退费
*/
@Override
public void updateStopDispenseStatus(List<Long> medDisIdList, Integer refund) {
baseMapper.update(
new MedicationDispense().setStatusEnum(DispenseStatus.STOPPED.getValue()).setNotPerformedReasonEnum(refund),
new LambdaUpdateWrapper<MedicationDispense>().in(MedicationDispense::getId, medDisIdList));
}
/**
* 更新药品状态:待配药
*
* @param medicationRequestIdList 请求id列表
*/
@Override
public void updatePreparationDispenseStatus(List<Long> medicationRequestIdList) {
baseMapper.update(null,
new LambdaUpdateWrapper<MedicationDispense>()
.set(MedicationDispense::getStatusEnum, DispenseStatus.PREPARATION.getValue())
.set(MedicationDispense::getStatusChangedTime, DateUtils.getNowDate())
.in(MedicationDispense::getMedReqId, medicationRequestIdList));
}
/**
* 更新药品状态:暂停
*
* @param medReqIdList 请求id列表
*/
@Override
public void updateOnHoldDispenseStatus(List<Long> medReqIdList) {
baseMapper.update(null,
new LambdaUpdateWrapper<MedicationDispense>()
.set(MedicationDispense::getStatusEnum, DispenseStatus.ON_HOLD.getValue())
.set(MedicationDispense::getStatusChangedTime, DateUtils.getNowDate())
.in(MedicationDispense::getMedReqId, medReqIdList));
}
/**
* 验证是否发过药
*
* @param medicationDefId 药品定义id
* @return 验证结果
*/
@Override
public boolean verifyAbleEdit(Long medicationDefId) {
return baseMapper.exists(
new LambdaQueryWrapper<MedicationDispense>().eq(MedicationDispense::getMedicationId, medicationDefId)
.and(q -> q.eq(MedicationDispense::getStatusEnum, DispenseStatus.COMPLETED.getValue()).or()
.eq(MedicationDispense::getStatusEnum, DispenseStatus.REFUNDED.getValue()))
.eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode()));
}
/**
* 通过请求id获取药品发放信息
*
* @param requestIdList 请求id
* @return 发放信息
*/
@Override
public List<MedicationDispense> selectByRequestIdList(List<Long> requestIdList){
return baseMapper.selectList( new LambdaQueryWrapper<MedicationDispense>().in(MedicationDispense::getMedReqId, requestIdList)
.eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode()));
}
/**
* 通过id获取药品发放信息
*
* @param idList 请求id
* @return 发放信息
*/
@Override
public List<MedicationDispense> selectByIdList(@Param("idList") List<Long> idList){
return baseMapper.selectList( new LambdaQueryWrapper<MedicationDispense>().in(MedicationDispense::getId, idList)
.eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode()));
}
/**
* 更新药品状态:已汇总
*
* @param medDispenseId 发放id列表
*/
@Override
public void updateDispenseStatusSummarized(List<Long> medDispenseId){
baseMapper.update(null,
new LambdaUpdateWrapper<MedicationDispense>()
.set(MedicationDispense::getStatusEnum, DispenseStatus.SUMMARIZED.getValue())
.set(MedicationDispense::getStatusChangedTime, DateUtils.getNowDate())
.in(MedicationDispense::getId, medDispenseId));
}
}

View File

@@ -0,0 +1,74 @@
package com.openhis.medication.service.impl;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.openhis.common.enums.DelFlag;
import com.openhis.common.enums.RequestStatus;
import com.openhis.medication.domain.MedicationRequest;
import com.openhis.medication.mapper.MedicationRequestMapper;
import com.openhis.medication.service.IMedicationRequestService;
/**
* 药品请求管理Service业务层处理
*
* @author system
* @date 2025-02-20
*/
@Service
public class MedicationRequestServiceImpl extends ServiceImpl<MedicationRequestMapper, MedicationRequest>
implements IMedicationRequestService {
/**
* 更新请求状态:已完成
*
* @param requestIdList 药品请求id列表
* @param practitionerId 校对人
* @param checkDate 校对时间
*/
@Override
public void updateCompletedStatusBatch(List<Long> requestIdList, Long practitionerId, Date checkDate) {
baseMapper.update(new MedicationRequest().setStatusEnum(RequestStatus.COMPLETED.getValue()),
new LambdaUpdateWrapper<MedicationRequest>().in(MedicationRequest::getId, requestIdList));
}
/**
* 更新请求状态:待发送
*
* @param requestIdList 药品请求id列表
* @param practitionerId 校对人
* @param checkDate 校对时间
*/
@Override
public void updateDraftStatusBatch(List<Long> requestIdList, Long practitionerId, Date checkDate) {
LambdaUpdateWrapper<MedicationRequest> updateWrapper =
new LambdaUpdateWrapper<MedicationRequest>().in(MedicationRequest::getId, requestIdList)
.set(MedicationRequest::getStatusEnum, RequestStatus.DRAFT.getValue());
if (practitionerId != null) {
updateWrapper.set(MedicationRequest::getPerformerCheckId, practitionerId);
}
if (checkDate != null) {
updateWrapper.set(MedicationRequest::getCheckTime, checkDate);
}
baseMapper.update(null, updateWrapper);
}
/**
* 通过id获取药品请求信息
*
* @param idList 请求id
* @return 发放信息
*/
@Override
public List<MedicationRequest> selectByIdList(@Param("idList") List<Long> idList) {
return baseMapper.selectList(new LambdaQueryWrapper<MedicationRequest>().in(MedicationRequest::getId, idList)
.eq(MedicationRequest::getDeleteFlag, DelFlag.NO.getCode()));
}
}

View File

@@ -0,0 +1,86 @@
package com.openhis.medication.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.core.common.utils.bean.BeanUtils;
import com.openhis.common.enums.DelFlag;
import com.openhis.medication.domain.Medication;
import com.openhis.medication.domain.MedicationDetail;
import com.openhis.medication.mapper.MedicationMapper;
import com.openhis.medication.service.IMedicationService;
import lombok.extern.slf4j.Slf4j;
/**
* 药品基本信息管理Service业务层处理
*
* @author system
* @date 2025-02-20
*/
@Slf4j
@Service
public class MedicationServiceImpl extends ServiceImpl<MedicationMapper, Medication> implements IMedicationService {
@Autowired
private MedicationMapper medicationMapper;
/**
* 查询药品信息列表
*
* @param medicationIdList 药品id列表
* @return 药品信息列表
*/
@Override
public List<Medication> getList(List<Long> medicationIdList) {
// 判断是否为空
if (!medicationIdList.isEmpty()) {
// 查询药品相关信息列表并返回
return baseMapper.selectList(new LambdaQueryWrapper<Medication>()
.eq(Medication::getDeleteFlag, DelFlag.NO.getValue()).in(Medication::getId, medicationIdList));
}
return null;
}
/**
* 查询药品详细信息列表
*
* @return 药品详细信息列表
*/
@Override
public List<MedicationDetail> getDetailList() {
return medicationMapper.selectDetailList();
}
/**
* 新增药品目录
*
* @param medicationDetail
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean addMedication(MedicationDetail medicationDetail) {
Medication medication = new Medication();
BeanUtils.copyProperties(medicationDetail, medication);
// 根据药品编码判断药品是否存在
List<Medication> medications = medicationMapper.selectList(
new LambdaQueryWrapper<Medication>().eq(Medication::getMedicationDefId, medication.getMedicationDefId()));
if (!medications.isEmpty()) {
return false;
}
// 新增药品目录
int insert = medicationMapper.insert(medication);
if (insert != 1) {
return false;
}
return true;
}
}