This commit is contained in:
LiJianZhao 2025-04-30 13:15:22 +08:00
parent 231590c4de
commit 7d4079d2fd
11 changed files with 161 additions and 46 deletions

View File

@ -1,25 +0,0 @@
package com.syjiaer.clinic.server.common.enums;
public enum MedicalRecordDetailTypeEnum {
item(1,"服务项目"),
goods(2,"药品耗材");
private final Integer type;
private final String desc;
MedicalRecordDetailTypeEnum(final Integer type, final String desc) {
this.type = type;
this.desc = desc;
}
public Integer getType() {
return type;
}
public String getDesc() {
return desc;
}
}

View File

@ -6,16 +6,16 @@ public enum RegistrationStatusEnum {
complete(3,"已诊"), complete(3,"已诊"),
cancel(0,"取消"); cancel(0,"取消");
private final Integer type; private final Integer status;
private final String desc; private final String desc;
RegistrationStatusEnum(final Integer type, final String desc) { RegistrationStatusEnum(final Integer status, final String desc) {
this.type = type; this.status = status;
this.desc = desc; this.desc = desc;
} }
public Integer getType() { public Integer getStatus() {
return type; return status;
} }
public String getDesc() { public String getDesc() {
@ -24,7 +24,7 @@ public enum RegistrationStatusEnum {
public static RegistrationStatusEnum getByType(Integer type) { public static RegistrationStatusEnum getByType(Integer type) {
for (RegistrationStatusEnum goodsTypeEnum : RegistrationStatusEnum.values()) { for (RegistrationStatusEnum goodsTypeEnum : RegistrationStatusEnum.values()) {
if (goodsTypeEnum.getType().equals(type)) { if (goodsTypeEnum.getStatus().equals(type)) {
return goodsTypeEnum; return goodsTypeEnum;
} }
} }

View File

@ -6,6 +6,7 @@ import com.syjiaer.clinic.server.controller.BaseController;
import com.syjiaer.clinic.server.entity.diagnosis.dto.ChargeQueueQuery; import com.syjiaer.clinic.server.entity.diagnosis.dto.ChargeQueueQuery;
import com.syjiaer.clinic.server.entity.diagnosis.dto.MedicalRecordSaveDto; import com.syjiaer.clinic.server.entity.diagnosis.dto.MedicalRecordSaveDto;
import com.syjiaer.clinic.server.entity.diagnosis.vo.MedicalRecordVo; import com.syjiaer.clinic.server.entity.diagnosis.vo.MedicalRecordVo;
import com.syjiaer.clinic.server.entity.patient.vo.SeeDoctorInfoVo;
import com.syjiaer.clinic.server.service.diagnosis.MedicalRecordService; import com.syjiaer.clinic.server.service.diagnosis.MedicalRecordService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -59,4 +60,15 @@ public class MedicalRecordController extends BaseController {
return success( medicalRecordService.getChargeQueue(query)); return success( medicalRecordService.getChargeQueue(query));
} }
/**
* 获取就诊信息
*/
@RequestMapping("/getSeeDockerInfo")
public Result<SeeDoctorInfoVo> getSeeDockerInfo() {
Integer regisId = parmsUtil.getInteger("regisId", "挂单id不能为空");
return success( medicalRecordService.getSeeDockerInfo(regisId));
}
} }

View File

@ -8,6 +8,7 @@ import com.syjiaer.clinic.server.entity.goods.Goods;
import com.syjiaer.clinic.server.entity.statistics.PersonPayOverviewVo; import com.syjiaer.clinic.server.entity.statistics.PersonPayOverviewVo;
import com.syjiaer.clinic.server.entity.statistics.RevenueOverviewVo; import com.syjiaer.clinic.server.entity.statistics.RevenueOverviewVo;
import com.syjiaer.clinic.server.entity.statistics.SalePersonReportVo; import com.syjiaer.clinic.server.entity.statistics.SalePersonReportVo;
import com.syjiaer.clinic.server.entity.statistics.TipCountVo;
import com.syjiaer.clinic.server.service.goods.GoodsService; import com.syjiaer.clinic.server.service.goods.GoodsService;
import com.syjiaer.clinic.server.service.inventory.InventoryService; import com.syjiaer.clinic.server.service.inventory.InventoryService;
import com.syjiaer.clinic.server.service.statistics.StatisticsService; import com.syjiaer.clinic.server.service.statistics.StatisticsService;
@ -15,11 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -50,6 +47,7 @@ public class StatisticsController extends BaseController {
public Result<List<Goods>> numberEarlyWarning() { public Result<List<Goods>> numberEarlyWarning() {
QueryWrapper<Goods> goodsQuery = new QueryWrapper<>(); QueryWrapper<Goods> goodsQuery = new QueryWrapper<>();
goodsQuery.apply("inventory_whole_number <= inventory_warn_number"); goodsQuery.apply("inventory_whole_number <= inventory_warn_number");
goodsQuery.orderByAsc("inventory_whole_number","type");
goodsQuery.last("limit 20"); goodsQuery.last("limit 20");
List<Goods> list = goodsService.list(goodsQuery); List<Goods> list = goodsService.list(goodsQuery);
return success(list); return success(list);
@ -77,7 +75,16 @@ public class StatisticsController extends BaseController {
return success( statisticsService.salePersonReport()); return success( statisticsService.salePersonReport());
} }
/**
* 获取收费队列 就诊队列数量
*/
@RequestMapping("/getTipCount")
public Result<TipCountVo> getChargeQueueCount() {
String begin = parmsUtil.getString("beginTime", "开始时间为空");
String end = parmsUtil.getString("endTime", "结束时间为空");
LocalDateTime beginTime = DateUtil.getDateTime(begin);
LocalDateTime endTime = DateUtil.getDateTime(end);
return success( statisticsService.getWaitCount(beginTime, endTime));
}
} }

View File

@ -1,12 +1,10 @@
package com.syjiaer.clinic.server.entity.diagnosis.dto; package com.syjiaer.clinic.server.entity.diagnosis.dto;
import com.syjiaer.clinic.server.entity.diagnosis.DiagnosisMedicalRecord; import com.syjiaer.clinic.server.entity.diagnosis.DiagnosisMedicalRecord;
import com.syjiaer.clinic.server.entity.item.Item;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
@Getter @Getter
@ -19,7 +17,7 @@ public class MedicalRecordSaveDto {
private Integer patientId; private Integer patientId;
@ApiModelProperty("接诊医生id") @ApiModelProperty("接诊医生id")
private Integer dockerId; private Integer doctorId;
@ApiModelProperty("挂单id") @ApiModelProperty("挂单id")
private Integer registrationId; private Integer registrationId;

View File

@ -0,0 +1,24 @@
package com.syjiaer.clinic.server.entity.patient.vo;
import com.syjiaer.clinic.server.entity.patient.PatientInfo;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class SeeDoctorInfoVo {
//患者信息
private PatientInfo patientInfo;
//挂号医生id
private Integer dockerId;
//挂号医生姓名
private String dockerName;
//医生科室名称
private String sectionName;
//上一次接诊时间
private LocalDateTime lastSeeDoctorTime;
//就诊次数
private Integer seeDoctorCount;
//医保余额
private BigDecimal socialBalance;
}

View File

@ -0,0 +1,19 @@
package com.syjiaer.clinic.server.entity.statistics;
import lombok.Data;
@Data
public class TipCountVo {
//待诊断数量
private Long waitDiagnosisCount;
//在诊数量
private Long diagnosingCount;
//完诊数量
private Long completeDiaCount;
//已收费数量
private Long chargedCount;
//未收费数量
private Long unchargedCount;
}

View File

@ -20,7 +20,7 @@ public interface InventoryMapper extends BaseMapper<Inventory> {
@Select("SELECT" + @Select("SELECT" +
" inventory.*,goods.expiry_warn_days,goods.unit_price,EXTRACT(EPOCH FROM AGE(expiry_date, CURRENT_DATE)) / 86400 AS remaining_days" + " inventory.*,goods.expiry_warn_days,goods.unit_price,EXTRACT(EPOCH FROM AGE(expiry_date, CURRENT_DATE)) / 86400 AS remaining_days" +
" FROM inventory LEFT JOIN goods ON inventory.good_id = goods.id" + " FROM inventory LEFT JOIN goods ON inventory.good_id = goods.id" +
" WHERE CURRENT_DATE + INTERVAL '1 day' * goods.expiry_warn_days >= inventory.expiry_date AND inventory.whole_number !=0 limit 20") " WHERE CURRENT_DATE + INTERVAL '1 day' * goods.expiry_warn_days >= inventory.expiry_date AND inventory.whole_number !=0 ORDER BY inventory.expiry_date ASC LIMIT 20 ")
List<Map<String, Object>> selectExpiryWarn(); List<Map<String, Object>> selectExpiryWarn();
} }

View File

@ -28,6 +28,7 @@ import com.syjiaer.clinic.server.entity.organization.OrganizationMember;
import com.syjiaer.clinic.server.entity.organization.OrganizationSection; import com.syjiaer.clinic.server.entity.organization.OrganizationSection;
import com.syjiaer.clinic.server.entity.patient.PatientInfo; import com.syjiaer.clinic.server.entity.patient.PatientInfo;
import com.syjiaer.clinic.server.entity.patient.PatientRegistration; import com.syjiaer.clinic.server.entity.patient.PatientRegistration;
import com.syjiaer.clinic.server.entity.patient.vo.SeeDoctorInfoVo;
import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMapper; import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMapper;
import com.syjiaer.clinic.server.mapper.goods.GoodsMapper; import com.syjiaer.clinic.server.mapper.goods.GoodsMapper;
import com.syjiaer.clinic.server.mapper.item.ItemMapper; import com.syjiaer.clinic.server.mapper.item.ItemMapper;
@ -92,7 +93,7 @@ public class MedicalRecordService extends BaseService {
} }
PatientRegistration updateRegis = new PatientRegistration(); PatientRegistration updateRegis = new PatientRegistration();
updateRegis.setId(dbRegis.getId()); updateRegis.setId(dbRegis.getId());
updateRegis.setStatus(RegistrationStatusEnum.complete.getType()); updateRegis.setStatus(RegistrationStatusEnum.complete.getStatus());
patientRegistrationMapper.updateById(updateRegis); patientRegistrationMapper.updateById(updateRegis);
//诊断主表 //诊断主表
Diagnosis diagnosis = new Diagnosis(); Diagnosis diagnosis = new Diagnosis();
@ -304,4 +305,32 @@ public class MedicalRecordService extends BaseService {
page.setTotal_count(diagnosisList.getTotal_count()); page.setTotal_count(diagnosisList.getTotal_count());
return page; return page;
} }
public SeeDoctorInfoVo getSeeDockerInfo(Integer regisId) {
PatientRegistration registration = patientRegistrationMapper.selectById(regisId);
if (registration == null){
throw new MessageException("挂号单不存在");
}
SeeDoctorInfoVo vo = new SeeDoctorInfoVo();
vo.setPatientInfo(patientInfoMapper.selectById(registration.getPatientInfoId()));
OrganizationMember docker = organizationMemberMapper.selectById(registration.getOrganizationDoctorId());
vo.setDockerId(docker.getId());
vo.setDockerName(docker.getName());
if (docker.getSectionId() != null){
OrganizationSection section = organizationSectionMapper.selectById(docker.getSectionId());
vo.setSectionName(section.getName());
}
QueryWrapper<Diagnosis> diagnosisQueryWrapper = new QueryWrapper<>();
diagnosisQueryWrapper.eq("patient_id",vo.getPatientInfo().getId());
diagnosisQueryWrapper.orderByDesc("create_time");
List<Diagnosis> diagnosisList = diagnosisMapper.selectList(diagnosisQueryWrapper);
if (!diagnosisList.isEmpty()){
vo.setLastSeeDoctorTime(diagnosisList.get(0).getCreateTime());
vo.setSeeDoctorCount(diagnosisList.size());
}
vo.setSocialBalance(BigDecimal.ZERO);
return vo;
}
} }

View File

@ -3,7 +3,6 @@ package com.syjiaer.clinic.server.service.patient;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.syjiaer.clinic.server.common.api.annotations.IMField;
import com.syjiaer.clinic.server.common.api.input.IM2201; import com.syjiaer.clinic.server.common.api.input.IM2201;
import com.syjiaer.clinic.server.common.api.request.SocialRequest; import com.syjiaer.clinic.server.common.api.request.SocialRequest;
import com.syjiaer.clinic.server.common.constants.Constants; import com.syjiaer.clinic.server.common.constants.Constants;
@ -296,10 +295,10 @@ public class PatientRegistrationService extends BaseService {
if (patientRegistration == null){ if (patientRegistration == null){
throw new MessageException("挂号单不存在"); throw new MessageException("挂号单不存在");
} }
if (statusEnum.equals(RegistrationStatusEnum.waiting) && !patientRegistration.getStatus().equals(RegistrationStatusEnum.inProgress.getType())){ if (statusEnum.equals(RegistrationStatusEnum.waiting) && !patientRegistration.getStatus().equals(RegistrationStatusEnum.inProgress.getStatus())){
throw new MessageException("初始状态不对"); throw new MessageException("初始状态不对");
} }
if (statusEnum.equals(RegistrationStatusEnum.cancel) && !patientRegistration.getStatus().equals(RegistrationStatusEnum.inProgress.getType())){ if (statusEnum.equals(RegistrationStatusEnum.cancel) && !patientRegistration.getStatus().equals(RegistrationStatusEnum.inProgress.getStatus())){
throw new MessageException("初始状态不对"); throw new MessageException("初始状态不对");
} }
PatientRegistration updateRegistration = new PatientRegistration(); PatientRegistration updateRegistration = new PatientRegistration();

View File

@ -2,17 +2,21 @@ package com.syjiaer.clinic.server.service.statistics;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.syjiaer.clinic.server.common.enums.GoodsTypeEnum; import com.syjiaer.clinic.server.common.enums.GoodsTypeEnum;
import com.syjiaer.clinic.server.common.enums.RegistrationStatusEnum;
import com.syjiaer.clinic.server.common.enums.RetailOrderPayTypeEnum; import com.syjiaer.clinic.server.common.enums.RetailOrderPayTypeEnum;
import com.syjiaer.clinic.server.common.enums.RetailOrderStatusEnum; import com.syjiaer.clinic.server.common.enums.RetailOrderStatusEnum;
import com.syjiaer.clinic.server.common.util.DateUtil; import com.syjiaer.clinic.server.common.util.DateUtil;
import com.syjiaer.clinic.server.entity.charge.ChargeGoodsList; import com.syjiaer.clinic.server.entity.charge.ChargeGoodsList;
import com.syjiaer.clinic.server.entity.charge.ChargeItemList;
import com.syjiaer.clinic.server.entity.charge.ChargeOrder; import com.syjiaer.clinic.server.entity.charge.ChargeOrder;
import com.syjiaer.clinic.server.entity.diagnosis.Diagnosis;
import com.syjiaer.clinic.server.entity.organization.OrganizationMember; import com.syjiaer.clinic.server.entity.organization.OrganizationMember;
import com.syjiaer.clinic.server.entity.patient.PatientRegistration;
import com.syjiaer.clinic.server.entity.statistics.*; import com.syjiaer.clinic.server.entity.statistics.*;
import com.syjiaer.clinic.server.mapper.charge.ChargeGoodsListMapper; import com.syjiaer.clinic.server.mapper.charge.ChargeGoodsListMapper;
import com.syjiaer.clinic.server.mapper.charge.ChargeOrderMapper; import com.syjiaer.clinic.server.mapper.charge.ChargeOrderMapper;
import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMapper;
import com.syjiaer.clinic.server.mapper.organization.OrganizationMemberMapper; import com.syjiaer.clinic.server.mapper.organization.OrganizationMemberMapper;
import com.syjiaer.clinic.server.mapper.patient.PatientRegistrationMapper;
import com.syjiaer.clinic.server.service.BaseService; import com.syjiaer.clinic.server.service.BaseService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -30,6 +34,10 @@ public class StatisticsService extends BaseService {
private ChargeGoodsListMapper chargeGoodsListMapper; private ChargeGoodsListMapper chargeGoodsListMapper;
@Autowired @Autowired
private OrganizationMemberMapper organizationMemberMapper; private OrganizationMemberMapper organizationMemberMapper;
@Autowired
private PatientRegistrationMapper patientRegistrationMapper;
@Autowired
private DiagnosisMapper diagnosisMapper;
public RevenueOverviewVo getRevenueOverview(LocalDateTime begin, LocalDateTime end) { public RevenueOverviewVo getRevenueOverview(LocalDateTime begin, LocalDateTime end) {
RevenueOverviewVo overviewVo = new RevenueOverviewVo(); RevenueOverviewVo overviewVo = new RevenueOverviewVo();
@ -184,4 +192,48 @@ public class StatisticsService extends BaseService {
List<SalePersonReportVo> result = voMaps.values().stream().toList(); List<SalePersonReportVo> result = voMaps.values().stream().toList();
return result; return result;
} }
public TipCountVo getWaitCount(LocalDateTime beginTime, LocalDateTime endTime) {
TipCountVo tipCountVo = new TipCountVo();
RegistrationStatusEnum registrationStatusEnum = RegistrationStatusEnum.waiting;
QueryWrapper<PatientRegistration> registrationWrapper = new QueryWrapper<>();
registrationWrapper.lt("create_datetime", endTime);
registrationWrapper.ge("create_datetime", beginTime);
registrationWrapper.eq("status", registrationStatusEnum.getStatus());
registrationWrapper.eq("del_flag",0);
tipCountVo.setWaitDiagnosisCount(patientRegistrationMapper.selectCount(registrationWrapper));
registrationStatusEnum = RegistrationStatusEnum.inProgress;
registrationWrapper = new QueryWrapper<>();
registrationWrapper.lt("create_datetime", endTime);
registrationWrapper.ge("create_datetime", beginTime);
registrationWrapper.eq("status", registrationStatusEnum.getStatus());
registrationWrapper.eq("del_flag",0);
tipCountVo.setDiagnosingCount(patientRegistrationMapper.selectCount(registrationWrapper));
registrationStatusEnum = RegistrationStatusEnum.complete;
registrationWrapper = new QueryWrapper<>();
registrationWrapper.lt("create_datetime", endTime);
registrationWrapper.ge("create_datetime", beginTime);
registrationWrapper.eq("status", registrationStatusEnum.getStatus());
registrationWrapper.eq("del_flag",0);
tipCountVo.setCompleteDiaCount(patientRegistrationMapper.selectCount(registrationWrapper));
QueryWrapper<Diagnosis> diagnosisWrapper = new QueryWrapper<>();
diagnosisWrapper.lt("create_time", endTime);
diagnosisWrapper.ge("create_time", beginTime);
diagnosisWrapper.eq("status", 0);
tipCountVo.setUnchargedCount(diagnosisMapper.selectCount(diagnosisWrapper));
diagnosisWrapper = new QueryWrapper<>();
diagnosisWrapper.lt("create_time", endTime);
diagnosisWrapper.ge("create_time", beginTime);
diagnosisWrapper.eq("status", 1);
tipCountVo.setChargedCount(diagnosisMapper.selectCount(diagnosisWrapper));
return tipCountVo;
}
} }