This commit is contained in:
LiJianZhao 2025-04-29 10:17:31 +08:00
parent a5d44f7cf3
commit b0a5fd76f5
6 changed files with 268 additions and 17 deletions

View File

@ -6,6 +6,7 @@ import com.syjiaer.clinic.server.common.vo.Result;
import com.syjiaer.clinic.server.controller.BaseController;
import com.syjiaer.clinic.server.entity.patient.PatientRegistration;
import com.syjiaer.clinic.server.entity.patient.dto.RegistrationQuery;
import com.syjiaer.clinic.server.entity.patient.dto.RegistrationSaveDto;
import com.syjiaer.clinic.server.entity.patient.vo.PatientAndRegistrationInfoVo;
import com.syjiaer.clinic.server.service.patient.PatientInfoService;
import com.syjiaer.clinic.server.service.patient.PatientRegistrationService;
@ -30,7 +31,7 @@ public class RegistrationController extends BaseController {
@RequestMapping("/add")
public Result<?> registration() {
PatientRegistration registrationParam = parmsUtil.getObjectWithCheck("data", PatientRegistration.class);
RegistrationSaveDto registrationParam = parmsUtil.getObjectWithCheck("data", RegistrationSaveDto.class);
String mdtrtCertNo = parmsUtil.getString("mdtrtCertNo");
String mdtrtCertType = parmsUtil.getString("mdtrtCertType");
patientRegistrationService.registration(registrationParam,mdtrtCertType,mdtrtCertNo);

View File

@ -5,20 +5,21 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* <p>
* 患者信息
* </p>
*
* @author NiuZiYuan
* @since 2025-04-17
* @since 2025-04-29
*/
@Getter
@Setter
@ -40,12 +41,51 @@ public class PatientInfo implements Serializable {
@ApiModelProperty("手机号")
private String phone;
@ApiModelProperty("身份证号")
private String certno;
@ApiModelProperty("")
private String certNo;
@ApiModelProperty("性别")
private String sex;
@ApiModelProperty("年龄")
private Integer age;
@ApiModelProperty("证件类型")
private String certType;
@ApiModelProperty("来源")
private String source;
@ApiModelProperty("民族")
private String nation;
@ApiModelProperty("地区")
private String area;
@ApiModelProperty("地址")
private String address;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("创建日期")
private LocalDateTime createDatetime;
@ApiModelProperty("会员等级")
private Integer levelId;
@ApiModelProperty("经验值")
private Integer exp;
@ApiModelProperty("积分余额")
private Integer integralBalance;
@ApiModelProperty("0没绑医保 1已绑定")
private Integer isBindSocial;
@ApiModelProperty("余额")
private BigDecimal balance;
@ApiModelProperty("生日")
private LocalDate brithday;
}

View File

@ -18,7 +18,7 @@ import lombok.experimental.Accessors;
* </p>
*
* @author NiuZiYuan
* @since 2025-04-23
* @since 2025-04-29
*/
@Getter
@Setter

View File

@ -0,0 +1,79 @@
package com.syjiaer.clinic.server.entity.patient.dto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class RegistrationSaveDto {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty("科室id")
private Integer organizationSectionId;
@ApiModelProperty("医生id")
private Integer organizationDoctorId;
@ApiModelProperty("患者姓名")
private String name;
@ApiModelProperty("患者年龄")
private Integer age;
@ApiModelProperty("患者手机号")
private String phone;
@ApiModelProperty("就诊类型")
private Short visitType;
@ApiModelProperty("挂号时间")
private LocalDateTime createDatetime;
@ApiModelProperty("推荐")
private String recommendations;
@ApiModelProperty("备注")
private String memo;
@ApiModelProperty("预诊")
private String advanceDiagnosis;
@ApiModelProperty("挂号费")
private BigDecimal registrationMoney;
@ApiModelProperty("逻辑删除")
private Integer delFlag;
@ApiModelProperty("挂号类型")
private Integer type;
@ApiModelProperty("性别")
private String gender;
@ApiModelProperty("病人id")
private Integer patientInfoId;
@ApiModelProperty("挂号状态 1候诊 2在诊 3已诊 0取消")
private Integer status;
@ApiModelProperty("人员编号")
private String psnNo;
@ApiModelProperty("险种类型")
private String insutype;
@ApiModelProperty("就诊id 挂号后医保返会")
private String mdtrtId;
@ApiModelProperty("流水号")
private String fstNo;
@ApiModelProperty("证件号码")
private String certNo;
@ApiModelProperty("证件类型")
private String certType;
}

View File

@ -1,26 +1,147 @@
package com.syjiaer.clinic.server.service.patient;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.syjiaer.clinic.server.common.exception.MessageException;
import com.syjiaer.clinic.server.entity.patient.PatientInfo;
import com.syjiaer.clinic.server.entity.vip.Vip;
import com.syjiaer.clinic.server.entity.vip.VipExpLog;
import com.syjiaer.clinic.server.entity.vip.VipIntegralLog;
import com.syjiaer.clinic.server.entity.vip.VipLevelConfig;
import com.syjiaer.clinic.server.mapper.patient.PatientInfoMapper;
import com.syjiaer.clinic.server.mapper.vip.VipExpLogMapper;
import com.syjiaer.clinic.server.mapper.vip.VipIntegralLogMapper;
import com.syjiaer.clinic.server.mapper.vip.VipLevelConfigMapper;
import com.syjiaer.clinic.server.service.BaseService;
import com.syjiaer.clinic.server.service.vip.VipLevelConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Service
public class PatientInfoService extends BaseService {
@Autowired
private PatientInfoMapper patientInfoMapper;
@Autowired
private VipLevelConfigMapper vipLevelConfigMapper;
@Autowired
private VipLevelConfigService vipLevelConfigService;
@Autowired
private VipExpLogMapper vipExpLogMapper;
@Autowired
private VipIntegralLogMapper vipIntegralLogMapper;
public void save(PatientInfo patientInfo){
patientInfo.setCreateDatetime(LocalDateTime.now());
if (patientInfo.getBrithday() != null) {
int currentYear = LocalDate.now().getYear();
int birthYear = patientInfo.getBrithday().getYear();
patientInfo.setAge(currentYear - birthYear);
}
VipLevelConfig level = vipLevelConfigService.getByExp(patientInfo.getExp());
if (level != null){
patientInfo.setLevelId(level.getLevelId());
}else {
patientInfo.setLevelId(0);
}
QueryWrapper<PatientInfo> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("phone", patientInfo.getPhone());
queryWrapper.eq("certno", patientInfo.getPhone());
PatientInfo dbInfo = patientInfoMapper.selectOne(queryWrapper);
if (dbInfo != null){
patientInfo.setId(dbInfo.getId());
patientInfo.setExp(null);
patientInfo.setLevelId(null);
patientInfo.setIntegralBalance(null);
patientInfo.setBalance(null);
}
patientInfoMapper.insertOrUpdate(patientInfo);
}
/**
* 改变会员经验值
* @param patientId
* @param changeExp
* @param remark
*/
@Transactional(rollbackFor = Exception.class)
public void changeExp(int patientId, int changeExp, String remark){
PatientInfo patientInfo = patientInfoMapper.selectById(patientId);
if(patientInfo==null){
throw new MessageException("会员不存在");
}
int start_exp = patientInfo.getExp();
int end_exp = start_exp + changeExp;
if(end_exp<0){
end_exp=0;
changeExp = -start_exp;
}
patientInfo.setExp(end_exp);
// 记录日志
VipExpLog vipExpLog = new VipExpLog();
vipExpLog.setStartExp(start_exp);
vipExpLog.setChangeExp(changeExp);
vipExpLog.setEndExp(end_exp);
vipExpLog.setVipId(patientId);
vipExpLog.setCreateDatetime(LocalDateTime.now());
vipExpLog.setRemark(remark);
//更新VIP等级
QueryWrapper<VipLevelConfig> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("start_exp");
List<VipLevelConfig> vipLevelConfigs = vipLevelConfigMapper.selectList(queryWrapper);
for (VipLevelConfig vipLevelConfig : vipLevelConfigs) {
if(end_exp>=vipLevelConfig.getStartExp()){
patientInfo.setLevelId(vipLevelConfig.getLevelId());
System.out.println(vipLevelConfig.getLevelId());
System.out.println(end_exp);
break;
}
}
UpdateWrapper<PatientInfo> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id",patientId);
updateWrapper.set("level_id",patientInfo.getLevelId());
updateWrapper.set("exp",patientInfo.getExp());
// 保存
patientInfoMapper.update(updateWrapper);
vipExpLogMapper.insert(vipExpLog);
}
/**
* 改变vip积分
* @param patientId
* @param addIntegral
* @param remark
*/
@Transactional(rollbackFor = Exception.class)
public void changeIntegral(int patientId, int addIntegral, String remark) {
PatientInfo patientInfo = patientInfoMapper.selectById(patientId);
if(patientInfo==null){
throw new MessageException("会员不存在");
}
Integer beforeIntegral = patientInfo.getIntegralBalance();
Integer finalIntegral = beforeIntegral + addIntegral;
PatientInfo updatePatient = new PatientInfo();
updatePatient.setId(patientId);
updatePatient.setIntegralBalance(finalIntegral);
patientInfoMapper.updateById(updatePatient);
//记录日志
VipIntegralLog vipIntegralLog = new VipIntegralLog();
vipIntegralLog.setBeforeIntegral(beforeIntegral);
vipIntegralLog.setAfterIntegral(finalIntegral);
vipIntegralLog.setChangeIntegral(addIntegral);
vipIntegralLog.setRemark(remark);
vipIntegralLog.setCreateTime(LocalDateTime.now());
vipIntegralLog.setVipId(patientId);
vipIntegralLogMapper.insert(vipIntegralLog);
}
}

View File

@ -3,6 +3,7 @@ package com.syjiaer.clinic.server.service.patient;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.request.SocialRequest;
import com.syjiaer.clinic.server.common.constants.Constants;
@ -16,6 +17,7 @@ import com.syjiaer.clinic.server.entity.organization.OrganizationSection;
import com.syjiaer.clinic.server.entity.patient.PatientInfo;
import com.syjiaer.clinic.server.entity.patient.PatientRegistration;
import com.syjiaer.clinic.server.entity.patient.dto.RegistrationQuery;
import com.syjiaer.clinic.server.entity.patient.dto.RegistrationSaveDto;
import com.syjiaer.clinic.server.entity.patient.vo.PatientAndRegistrationInfoVo;
import com.syjiaer.clinic.server.mapper.organization.OrganizationMemberMapper;
import com.syjiaer.clinic.server.mapper.organization.OrganizationSectionMapper;
@ -58,11 +60,18 @@ public class PatientRegistrationService extends BaseService {
* @param patientRegistrationParam 挂号信息
*/
@Transactional(rollbackFor = Exception.class)
public PatientRegistration registration(PatientRegistration registrationParam,String mdtrtCertType, String mdtrtCertNo) {
//TODO 挂号和患者 记录身份证号非必填
public PatientRegistration registration(RegistrationSaveDto registrationParam, String mdtrtCertType, String mdtrtCertNo) {
if (registrationParam == null) {
throw new MessageException("data参数为空");
}
if (registrationParam.getCertType() == null){
throw new MessageException("证件类型不能为空");
}
if (registrationParam.getCertNo() == null){
throw new MessageException("证件号码不能为空");
}
LocalDateTime now =LocalDateTime.now();
String fstNo = StringUtil.getCode("FSN");
if (registrationParam.getPatientInfoId() == null){
@ -73,9 +82,11 @@ public class PatientRegistrationService extends BaseService {
patientInfo.setPhone(registrationParam.getPhone());
patientInfo.setSex(registrationParam.getGender());
patientInfo.setAge(registrationParam.getAge());
patientInfo.setCertType(registrationParam.getCertType());
patientInfo.setCertNo(registrationParam.getCertNo());
QueryWrapper<PatientInfo> patientInfoQuery = new QueryWrapper<>();
patientInfoQuery.eq("phone", registrationParam.getPhone());
patientInfoQuery.eq("cert_no", registrationParam.getCertNo());
List<PatientInfo> patientInfoList = patientInfoMapper.selectList(patientInfoQuery);
if (patientInfoList.isEmpty()) {
patientInfoMapper.insert(patientInfo);
@ -120,14 +131,11 @@ public class PatientRegistrationService extends BaseService {
regisWrapper.set("type",2);
regisWrapper.eq("id",registration.getId());
patientRegistrationMapper.update(null,regisWrapper);
return registration;
}
public PatientRegistration regisByDockerAndPatient(OrganizationMember docker, PatientInfo patient, Short type, Integer status){
PatientRegistration registration = new PatientRegistration();
RegistrationSaveDto registration = new RegistrationSaveDto();
//病人信息
registration.setPatientInfoId(patient.getId());
registration.setName(patient.getName());
@ -143,6 +151,8 @@ public class PatientRegistrationService extends BaseService {
registration.setCreateDatetime(LocalDateTime.now());
registration.setRegistrationMoney(BigDecimal.valueOf(0));
registration.setDelFlag(0);
return patientRegistrationService.registration(registration,null,null);
}