修改任务审核。

This commit is contained in:
haown 2024-04-16 09:56:09 +08:00
parent fb9df1c0d4
commit e064c8b037
28 changed files with 729 additions and 119 deletions

View File

@ -0,0 +1,34 @@
package com.xinelu.common.constant;
/**
* @description: 任务内容常量
* @author: haown
* @create: 2024-04-12 16:50
**/
public class TaskContentConstants {
/**
* 电话外呼
*/
public static final String PHONE_OUTBOUND = "PHONE_OUTBOUND";
/**
* 问卷量表
*/
public static final String QUESTIONNAIRE_SCALE = "QUESTIONNAIRE_SCALE";
/**
* 宣教文章
*/
public static final String PROPAGANDA_ARTICLE = "PROPAGANDA_ARTICLE";
/**
* 文字提醒
*/
public static final String TEXT_REMIND = "TEXT_REMIND";
/**
* 人工随访
*/
public static final String ARTIFICIAL_FOLLOW_UP = "ARTIFICIAL_FOLLOW_UP";
}

View File

@ -10,6 +10,7 @@ import lombok.Getter;
*/ */
@Getter @Getter
public enum RouteCheckStatusEnum { public enum RouteCheckStatusEnum {
/** /**
* 同意 * 同意
*/ */

View File

@ -13,6 +13,7 @@ import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordImportDto;
import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordInfoSaveDto; import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordInfoSaveDto;
import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordSaveDto; import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordSaveDto;
import com.xinelu.manage.service.patientvisitrecord.IPatientVisitRecordService; import com.xinelu.manage.service.patientvisitrecord.IPatientVisitRecordService;
import com.xinelu.manage.vo.patientvisitrecord.PatientVisitRecordVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import java.util.List; import java.util.List;
@ -79,6 +80,15 @@ public class PatientVisitRecordController extends BaseController {
return AjaxResult.success(patientVisitRecordService.selectPatientVisitRecordById(id)); return AjaxResult.success(patientVisitRecordService.selectPatientVisitRecordById(id));
} }
/**
* 查询患者最新一次就诊记录信息
*/
@PreAuthorize("@ss.hasPermi('manage:visit:query')")
@GetMapping(value = "/getByPatientId/{patientId}")
public R<PatientVisitRecordVo> getByPatientId(@PathVariable("patientId") Long patientId) {
return R.ok(patientVisitRecordService.getByPatientId(patientId));
}
/** /**
* 新增患者就诊记录基本信息 * 新增患者就诊记录基本信息
*/ */

View File

@ -62,7 +62,7 @@ public class QuestionInfoController extends BaseController {
if (Objects.isNull(id)) { if (Objects.isNull(id)) {
return AjaxResult.success(); return AjaxResult.success();
} }
return questionInfoService.selectQuestionInfoById(id); return AjaxResult.success(questionInfoService.selectQuestionInfoById(id));
} }
/** /**

View File

@ -3,6 +3,7 @@ package com.xinelu.manage.controller.signpatientmanageroute;
import com.xinelu.common.annotation.Log; import com.xinelu.common.annotation.Log;
import com.xinelu.common.core.controller.BaseController; import com.xinelu.common.core.controller.BaseController;
import com.xinelu.common.core.domain.AjaxResult; import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.core.domain.R;
import com.xinelu.common.core.page.TableDataInfo; import com.xinelu.common.core.page.TableDataInfo;
import com.xinelu.common.enums.BusinessType; import com.xinelu.common.enums.BusinessType;
import com.xinelu.common.utils.poi.ExcelUtil; import com.xinelu.common.utils.poi.ExcelUtil;
@ -12,12 +13,18 @@ import com.xinelu.manage.dto.patientquestionsubmitresult.PatientQuestionSubmitRe
import com.xinelu.manage.service.signpatientmanageroute.ISignPatientManageRouteService; import com.xinelu.manage.service.signpatientmanageroute.ISignPatientManageRouteService;
import com.xinelu.manage.vo.manualfollowup.ManualFollowUpVO; import com.xinelu.manage.vo.manualfollowup.ManualFollowUpVO;
import com.xinelu.manage.vo.signpatientmanageroute.SignPatientManageRouteVO; import com.xinelu.manage.vo.signpatientmanageroute.SignPatientManageRouteVO;
import org.springframework.security.access.prepost.PreAuthorize; import java.util.List;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.List; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/** /**
* 签约患者管理任务路径Controller * 签约患者管理任务路径Controller
@ -119,5 +126,11 @@ public class SignPatientManageRouteController extends BaseController {
return signPatientManageRouteService.addPatientQuestionResult(dto); return signPatientManageRouteService.addPatientQuestionResult(dto);
} }
/**
* 患者详情--康复计划及记录
*/
@GetMapping("/getRouteList")
public R<List<SignPatientManageRoute>> getRouteList(SignPatientManageRoute signPatientManageRoute) {
return R.ok(signPatientManageRouteService.getRouteList(signPatientManageRoute));
}
} }

View File

@ -54,9 +54,9 @@ public class SignPatientManageRouteNodeController extends BaseController {
} }
/** /**
* 查询管理任务路径及节点 * 任务审核--查询患者任务路径及节点
*/ */
@ApiOperation("查询管理任务路径及节点") @ApiOperation("任务审核--查询患者任务路径及节点")
@GetMapping("/getRouteNodeList") @GetMapping("/getRouteNodeList")
public R<List<SignPatientManageRouteNodeVo>> getRouteNodeList(PatientTaskDto patientTaskDto) { public R<List<SignPatientManageRouteNodeVo>> getRouteNodeList(PatientTaskDto patientTaskDto) {
List<SignPatientManageRouteNodeVo> list = signNodeService.getRouteNodeList(patientTaskDto); List<SignPatientManageRouteNodeVo> list = signNodeService.getRouteNodeList(patientTaskDto);

View File

@ -123,6 +123,12 @@ public class SignPatientRecord extends BaseEntity {
@ApiModelProperty(value = "签约时所属病区名称") @ApiModelProperty(value = "签约时所属病区名称")
private String wardName; private String wardName;
/**
* 就诊记录表主键
*/
@ApiModelProperty(value = "就诊记录表主键")
private Long patientVisitRecordId;
/** /**
* 就诊流水号 * 就诊流水号
*/ */

View File

@ -14,15 +14,27 @@ import org.springframework.format.annotation.DateTimeFormat;
@Data @Data
public class PatientVisitRecordDto { public class PatientVisitRecordDto {
/** 居民信息表id */ /**
* 居民信息表id
* */
@ApiModelProperty(value = "居民信息表id") @ApiModelProperty(value = "居民信息表id")
private Long residentId; private Long residentId;
/** 患者表id */ /**
* 患者表id
* */
@ApiModelProperty(value = "患者表id") @ApiModelProperty(value = "患者表id")
private Long patientId; private Long patientId;
/** 所属医院id */ /**
* 居民身份证号
* */
@ApiModelProperty(value = "居民身份证号")
private String cardNo;
/**
* 所属医院id
* */
@ApiModelProperty(value = "所属医院id") @ApiModelProperty(value = "所属医院id")
@Excel(name = "所属医院id") @Excel(name = "所属医院id")
private Long hospitalAgencyId; private Long hospitalAgencyId;

View File

@ -56,7 +56,7 @@ public class PatientTaskDto {
private Long wardId; private Long wardId;
/** 节点审核状态同意AGREE不同意DISAGREE */ /** 节点审核状态同意AGREE不同意DISAGREE */
@ApiModelProperty(value = "节点审核状态,同意AGREE不同意DISAGREE") @ApiModelProperty(value = "节点审核状态,未审核UNAUDITED同意AGREE不同意DISAGREE")
private String routeCheckStatus; private String routeCheckStatus;
/** 主要诊断 */ /** 主要诊断 */

View File

@ -2,6 +2,7 @@ package com.xinelu.manage.dto.signpatientmanageroutenode;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import lombok.Data; import lombok.Data;
/** /**
@ -13,9 +14,9 @@ import lombok.Data;
@Data @Data
public class RouteNodeCheckDto { public class RouteNodeCheckDto {
/** 签约患者管理任务表id */ /** 签约患者管理任务节点表id列表 */
@ApiModelProperty(value = "签约患者管理任务表id") @ApiModelProperty(value = "签约患者管理任务节点表id列表")
private Long manageRouteId; private List<Long> manageRouteNodeIds;
/** 节点审核状态同意AGREE不同意DISAGREE */ /** 节点审核状态同意AGREE不同意DISAGREE */
@ApiModelProperty(value = "节点审核状态同意AGREE不同意DISAGREE") @ApiModelProperty(value = "节点审核状态同意AGREE不同意DISAGREE")

View File

@ -2,6 +2,7 @@ package com.xinelu.manage.mapper.patientvisitrecord;
import com.xinelu.manage.domain.patientvisitrecord.PatientVisitRecord; import com.xinelu.manage.domain.patientvisitrecord.PatientVisitRecord;
import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordDto; import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordDto;
import com.xinelu.manage.vo.patientvisitrecord.PatientVisitRecordVo;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -19,7 +20,14 @@ public interface PatientVisitRecordMapper {
* @param id 患者就诊记录基本信息主键 * @param id 患者就诊记录基本信息主键
* @return 患者就诊记录基本信息 * @return 患者就诊记录基本信息
*/ */
public PatientVisitRecord selectPatientVisitRecordById(Long id); PatientVisitRecord selectPatientVisitRecordById(Long id);
/**
* 查询患者最新一条就诊记录信息
* @param patientId 患者记录表主键
* @return 患者就诊信息视图类
*/
PatientVisitRecordVo getByPatientId(Long patientId);
/** /**
* 查询患者就诊记录基本信息列表 * 查询患者就诊记录基本信息列表
@ -27,7 +35,7 @@ public interface PatientVisitRecordMapper {
* @param patientVisitRecord 患者就诊记录基本信息 * @param patientVisitRecord 患者就诊记录基本信息
* @return 患者就诊记录基本信息集合 * @return 患者就诊记录基本信息集合
*/ */
public List<PatientVisitRecord> selectPatientVisitRecordList(PatientVisitRecordDto patientVisitRecord); List<PatientVisitRecord> selectPatientVisitRecordList(PatientVisitRecordDto patientVisitRecord);
/** /**
* 新增患者就诊记录基本信息 * 新增患者就诊记录基本信息
@ -35,7 +43,7 @@ public interface PatientVisitRecordMapper {
* @param patientVisitRecord 患者就诊记录基本信息 * @param patientVisitRecord 患者就诊记录基本信息
* @return 结果 * @return 结果
*/ */
public int insertPatientVisitRecord(PatientVisitRecord patientVisitRecord); int insertPatientVisitRecord(PatientVisitRecord patientVisitRecord);
int insertBatch(@Param("patientVisitRecordList") Collection<PatientVisitRecord> patientVisitRecordList); int insertBatch(@Param("patientVisitRecordList") Collection<PatientVisitRecord> patientVisitRecordList);
/** /**
@ -44,7 +52,7 @@ public interface PatientVisitRecordMapper {
* @param patientVisitRecord 患者就诊记录基本信息 * @param patientVisitRecord 患者就诊记录基本信息
* @return 结果 * @return 结果
*/ */
public int updatePatientVisitRecord(PatientVisitRecord patientVisitRecord); int updatePatientVisitRecord(PatientVisitRecord patientVisitRecord);
/** /**
* 删除患者就诊记录基本信息 * 删除患者就诊记录基本信息
@ -52,7 +60,7 @@ public interface PatientVisitRecordMapper {
* @param id 患者就诊记录基本信息主键 * @param id 患者就诊记录基本信息主键
* @return 结果 * @return 结果
*/ */
public int deletePatientVisitRecordById(Long id); int deletePatientVisitRecordById(Long id);
/** /**
* 批量删除患者就诊记录基本信息 * 批量删除患者就诊记录基本信息
@ -60,16 +68,13 @@ public interface PatientVisitRecordMapper {
* @param ids 需要删除的数据主键集合 * @param ids 需要删除的数据主键集合
* @return 结果 * @return 结果
*/ */
public int deletePatientVisitRecordByIds(Long[] ids); int deletePatientVisitRecordByIds(Long[] ids);
PatientVisitRecord judgeRepeat(@Param("hospitalAgencyId") Long hospitalAgencyId, @Param("cardNo") String cardNo,
@Param("inHospitalNumber") String inHospitalNumber);
/** /**
* 获取居民在当前机构最新一条就诊记录 * 根据查询条件获取最新一条就诊记录
* @param hospitalAgencyId 机构id * @param patientVisitRecordDto 患者就诊记录查询传输对象
* @param patientId 患者id * @return 就诊记录信息
* @return 结果
*/ */
PatientVisitRecord getLastRecord(@Param("hospitalAgencyId") Long hospitalAgencyId, @Param("patientId") Long patientId); PatientVisitRecord getLastRecord(PatientVisitRecordDto patientVisitRecordDto);
} }

View File

@ -144,8 +144,9 @@ public class PatientInfoServiceImpl implements IPatientInfoService {
patientVisitRecordService.deletePatientVisitRecordById(patientInfo.getPatientVisitRecordId()); patientVisitRecordService.deletePatientVisitRecordById(patientInfo.getPatientVisitRecordId());
// 根据患者最新一条就诊记录修改患者状态 // 根据患者最新一条就诊记录修改患者状态
PatientVisitRecordDto patientVisitRecordDto = new PatientVisitRecordDto(); PatientVisitRecordDto patientVisitRecordDto = new PatientVisitRecordDto();
patientVisitRecordDto.setHospitalAgencyId(patientInfo.getHospitalAgencyId());
patientVisitRecordDto.setPatientId(id); patientVisitRecordDto.setPatientId(id);
PatientVisitRecord patientVisitRecord = patientVisitRecordService.getLastRecord(patientInfo.getHospitalAgencyId(), id); PatientVisitRecord patientVisitRecord = patientVisitRecordService.getLastRecord(patientVisitRecordDto);
if (ObjectUtils.isEmpty(patientVisitRecord)) { if (ObjectUtils.isEmpty(patientVisitRecord)) {
setVisitInfoNull(patientInfo); setVisitInfoNull(patientInfo);
} else { } else {

View File

@ -14,6 +14,7 @@ import com.xinelu.manage.domain.patientinfo.PatientInfo;
import com.xinelu.manage.domain.patientprehospitalization.PatientPreHospitalization; import com.xinelu.manage.domain.patientprehospitalization.PatientPreHospitalization;
import com.xinelu.manage.domain.patientvisitrecord.PatientVisitRecord; import com.xinelu.manage.domain.patientvisitrecord.PatientVisitRecord;
import com.xinelu.manage.dto.patientinfo.PatientInfoDto; import com.xinelu.manage.dto.patientinfo.PatientInfoDto;
import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordDto;
import com.xinelu.manage.mapper.agency.AgencyMapper; import com.xinelu.manage.mapper.agency.AgencyMapper;
import com.xinelu.manage.mapper.department.DepartmentMapper; import com.xinelu.manage.mapper.department.DepartmentMapper;
import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper; import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper;
@ -120,7 +121,10 @@ public class PatientPreHospitalizationServiceImpl implements IPatientPreHospital
// 将患者状态还原为上一个状态 // 将患者状态还原为上一个状态
PatientPreHospitalization patientPreHospitalization = preHospitalizationMapper.selectByPrimaryKey(id); PatientPreHospitalization patientPreHospitalization = preHospitalizationMapper.selectByPrimaryKey(id);
PatientInfo patientInfo = patientInfoService.selectPatientInfoById(patientPreHospitalization.getPatientId()); PatientInfo patientInfo = patientInfoService.selectPatientInfoById(patientPreHospitalization.getPatientId());
PatientVisitRecord patientVisitRecord = patientVisitRecordService.getLastRecord(patientPreHospitalization.getHospitalAgencyId(), patientPreHospitalization.getPatientId()); PatientVisitRecordDto patientVisitRecordDto = new PatientVisitRecordDto();
patientVisitRecordDto.setHospitalAgencyId(patientPreHospitalization.getHospitalAgencyId());
patientVisitRecordDto.setPatientId(patientPreHospitalization.getPatientId());
PatientVisitRecord patientVisitRecord = patientVisitRecordService.getLastRecord(patientVisitRecordDto);
if (ObjectUtils.isEmpty(patientVisitRecord)) { if (ObjectUtils.isEmpty(patientVisitRecord)) {
// 患者的预住院信息置空 // 患者的预住院信息置空
setPreHospitalizationInfoNull(patientInfo); setPreHospitalizationInfoNull(patientInfo);

View File

@ -7,6 +7,7 @@ import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordDto;
import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordImportDto; import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordImportDto;
import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordInfoSaveDto; import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordInfoSaveDto;
import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordSaveDto; import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordSaveDto;
import com.xinelu.manage.vo.patientvisitrecord.PatientVisitRecordVo;
import java.util.List; import java.util.List;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@ -26,6 +27,13 @@ public interface IPatientVisitRecordService {
*/ */
PatientVisitRecord selectPatientVisitRecordById(Long id); PatientVisitRecord selectPatientVisitRecordById(Long id);
/**
* 查询患者最新一次就诊记录信息
* @param patientId 患者记录表主键
* @return 患者就诊信息视图类
*/
PatientVisitRecordVo getByPatientId(Long patientId);
/** /**
* 查询患者就诊记录基本信息列表 * 查询患者就诊记录基本信息列表
* *
@ -91,5 +99,5 @@ public interface IPatientVisitRecordService {
void setPatientType(PatientInfo patientInfo, PatientVisitRecord patientVisitRecord); void setPatientType(PatientInfo patientInfo, PatientVisitRecord patientVisitRecord);
PatientVisitRecord getLastRecord(Long hospitalAgencyId, Long patientId); PatientVisitRecord getLastRecord(PatientVisitRecordDto patientVisitRecordDto);
} }

View File

@ -27,6 +27,7 @@ import com.xinelu.manage.mapper.patientvisitrecord.PatientVisitRecordMapper;
import com.xinelu.manage.service.patientinfo.IPatientInfoService; import com.xinelu.manage.service.patientinfo.IPatientInfoService;
import com.xinelu.manage.service.patientvisitrecord.IPatientVisitRecordService; import com.xinelu.manage.service.patientvisitrecord.IPatientVisitRecordService;
import com.xinelu.manage.vo.patientinfo.PatientBaseInfoVo; import com.xinelu.manage.vo.patientinfo.PatientBaseInfoVo;
import com.xinelu.manage.vo.patientvisitrecord.PatientVisitRecordVo;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.ArrayList; import java.util.ArrayList;
@ -71,7 +72,11 @@ public class PatientVisitRecordServiceImpl implements IPatientVisitRecordService
return patientVisitRecordMapper.selectPatientVisitRecordById(id); return patientVisitRecordMapper.selectPatientVisitRecordById(id);
} }
/** @Override public PatientVisitRecordVo getByPatientId(Long patientId) {
return patientVisitRecordMapper.getByPatientId(patientId);
}
/**
* 查询患者就诊记录基本信息列表 * 查询患者就诊记录基本信息列表
* *
* @param patientVisitRecord 患者就诊记录基本信息 * @param patientVisitRecord 患者就诊记录基本信息
@ -92,7 +97,11 @@ public class PatientVisitRecordServiceImpl implements IPatientVisitRecordService
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void insertPatientVisitRecord(PatientVisitRecordSaveDto saveDto) { public void insertPatientVisitRecord(PatientVisitRecordSaveDto saveDto) {
// 根据机构id患者身份证号判断门诊/住院号是否重复 // 根据机构id患者身份证号判断门诊/住院号是否重复
PatientVisitRecord patientVisitRecord = patientVisitRecordMapper.judgeRepeat(saveDto.getHospitalAgencyId(), saveDto.getCardNo(), saveDto.getInHospitalNumber()); PatientVisitRecordDto patientVisitRecordDto = new PatientVisitRecordDto();
patientVisitRecordDto.setHospitalAgencyId(saveDto.getHospitalAgencyId());
patientVisitRecordDto.setCardNo(saveDto.getCardNo());
patientVisitRecordDto.setInHospitalNumber(saveDto.getInHospitalNumber());
PatientVisitRecord patientVisitRecord = patientVisitRecordMapper.getLastRecord(patientVisitRecordDto);
if (ObjectUtils.isNotEmpty(patientVisitRecord)) { if (ObjectUtils.isNotEmpty(patientVisitRecord)) {
throw new ServiceException("门诊/住院号重复,请确认后重新输入!"); throw new ServiceException("门诊/住院号重复,请确认后重新输入!");
} }
@ -158,7 +167,11 @@ public class PatientVisitRecordServiceImpl implements IPatientVisitRecordService
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int updatePatientVisitRecord(PatientVisitRecord patientVisitRecord) { public int updatePatientVisitRecord(PatientVisitRecord patientVisitRecord) {
// 根据机构id患者身份证号判断门诊/住院号是否重复 // 根据机构id患者身份证号判断门诊/住院号是否重复
PatientVisitRecord object = patientVisitRecordMapper.judgeRepeat(patientVisitRecord.getHospitalAgencyId(), patientVisitRecord.getCardNo(), patientVisitRecord.getInHospitalNumber()); PatientVisitRecordDto patientVisitRecordDto = new PatientVisitRecordDto();
patientVisitRecordDto.setHospitalAgencyId(patientVisitRecord.getHospitalAgencyId());
patientVisitRecordDto.setCardNo(patientVisitRecord.getCardNo());
patientVisitRecordDto.setInHospitalNumber(patientVisitRecord.getInHospitalNumber());
PatientVisitRecord object = patientVisitRecordMapper.getLastRecord(patientVisitRecordDto);
if (ObjectUtils.isNotEmpty(object)) { if (ObjectUtils.isNotEmpty(object)) {
throw new ServiceException("门诊/住院号重复,请确认后重新输入!"); throw new ServiceException("门诊/住院号重复,请确认后重新输入!");
} }
@ -183,7 +196,11 @@ public class PatientVisitRecordServiceImpl implements IPatientVisitRecordService
PatientBaseInfoVo patientBaseInfo = patientMapper.getPatientBaseInfo(saveDto.getPatientId()); PatientBaseInfoVo patientBaseInfo = patientMapper.getPatientBaseInfo(saveDto.getPatientId());
BeanUtils.copyBeanProp(patientVisitRecord, patientBaseInfo); BeanUtils.copyBeanProp(patientVisitRecord, patientBaseInfo);
// 根据机构id患者身份证号判断门诊/住院号是否重复 // 根据机构id患者身份证号判断门诊/住院号是否重复
PatientVisitRecord object = patientVisitRecordMapper.judgeRepeat(patientVisitRecord.getHospitalAgencyId(), patientVisitRecord.getCardNo(), patientVisitRecord.getInHospitalNumber()); PatientVisitRecordDto patientVisitRecordDto = new PatientVisitRecordDto();
patientVisitRecordDto.setHospitalAgencyId(patientVisitRecord.getHospitalAgencyId());
patientVisitRecordDto.setCardNo(patientVisitRecord.getCardNo());
patientVisitRecordDto.setInHospitalNumber(patientVisitRecord.getInHospitalNumber());
PatientVisitRecord object = patientVisitRecordMapper.getLastRecord(patientVisitRecordDto);
if (ObjectUtils.isNotEmpty(object)) { if (ObjectUtils.isNotEmpty(object)) {
throw new ServiceException("门诊/住院号重复,请确认后重新输入!"); throw new ServiceException("门诊/住院号重复,请确认后重新输入!");
} }
@ -404,8 +421,8 @@ public class PatientVisitRecordServiceImpl implements IPatientVisitRecordService
} }
} }
@Override public PatientVisitRecord getLastRecord(Long hospitalAgencyId, Long patientId) { @Override public PatientVisitRecord getLastRecord(PatientVisitRecordDto patientVisitRecordDto) {
return patientVisitRecordMapper.getLastRecord(hospitalAgencyId, patientId); return patientVisitRecordMapper.getLastRecord(patientVisitRecordDto);
} }
private void setVisitDate(PatientVisitRecord patientVisitRecord) { private void setVisitDate(PatientVisitRecord patientVisitRecord) {

View File

@ -19,7 +19,7 @@ public interface IQuestionInfoService {
* @param id 问卷基本信息主键 * @param id 问卷基本信息主键
* @return 问卷基本信息 * @return 问卷基本信息
*/ */
AjaxResult selectQuestionInfoById(Long id); QuestionVO selectQuestionInfoById(Long id);
/** /**
* 查询问卷基本信息列表 * 查询问卷基本信息列表

View File

@ -15,17 +15,16 @@ import com.xinelu.manage.vo.department.DepartmentVO;
import com.xinelu.manage.vo.questionInfo.QuestionVO; import com.xinelu.manage.vo.questionInfo.QuestionVO;
import com.xinelu.manage.vo.questionsubject.QuestionSubjectVO; import com.xinelu.manage.vo.questionsubject.QuestionSubjectVO;
import com.xinelu.manage.vo.questionsubjectoption.QuestionSubjectOptionVO; import com.xinelu.manage.vo.questionsubjectoption.QuestionSubjectOptionVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/** /**
* 问卷基本信息Service业务层处理 * 问卷基本信息Service业务层处理
@ -45,29 +44,32 @@ public class QuestionInfoServiceImpl implements IQuestionInfoService {
@Override @Override
public AjaxResult selectQuestionInfoById(Long id) { public QuestionVO selectQuestionInfoById(Long id) {
//查询问卷表 //查询问卷表
QuestionInfo questionInfo = questionInfoMapper.selectQuestionInfoById(id); QuestionInfo questionInfo = questionInfoMapper.selectQuestionInfoById(id);
if (Objects.isNull(questionInfo)) { //if (Objects.isNull(questionInfo)) {
return AjaxResult.error("该问卷信息已不存在!"); // throw new ServiceException("该问卷信息已不存在!");
} //}
//查询题目表 QuestionVO questionVO = new QuestionVO();
QuestionVO questionVO = new QuestionVO(); // 查询题目表
BeanUtils.copyBeanProp(questionVO, questionInfo); if (Objects.nonNull(questionInfo)) {
List<QuestionSubjectVO> questionSubjects = questionSubjectMapper.selectQuestionSubjectBy(id); BeanUtils.copyBeanProp(questionVO, questionInfo);
List<Long> questionSubjectIds = questionSubjects.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getId())).map(QuestionSubject::getId).collect(Collectors.toList()); List<QuestionSubjectVO> questionSubjects = questionSubjectMapper.selectQuestionSubjectBy(id);
if (questionSubjectIds.size() == 0) { List<Long> questionSubjectIds = questionSubjects.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getId())).map(QuestionSubject::getId).collect(Collectors.toList());
questionVO.setQuestionSubjectList(questionSubjects); if (questionSubjectIds.size() == 0) {
return AjaxResult.success(questionVO); questionVO.setQuestionSubjectList(questionSubjects);
} return questionVO;
//查询选项表 }
List<QuestionSubjectOptionVO> questionSubjectOptions = questionSubjectOptionMapper.selectQuestionSubjectOptions(questionSubjectIds); // 查询选项表
for (QuestionSubjectVO questionSubject : questionSubjects) { List<QuestionSubjectOptionVO> questionSubjectOptions = questionSubjectOptionMapper.selectQuestionSubjectOptions(questionSubjectIds);
List<QuestionSubjectOptionVO> collect = questionSubjectOptions.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getQuestionnaireSubjectId()) && questionSubject.getId().equals(item.getQuestionnaireSubjectId())).collect(Collectors.toList()); for (QuestionSubjectVO questionSubject : questionSubjects) {
questionSubject.setQuestionSubjectOptionList(collect); List<QuestionSubjectOptionVO> collect = questionSubjectOptions.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getQuestionnaireSubjectId()) && questionSubject.getId().equals(item.getQuestionnaireSubjectId())).collect(Collectors.toList());
} questionSubject.setQuestionSubjectOptionList(collect);
questionVO.setQuestionSubjectList(questionSubjects); }
return AjaxResult.success(questionVO); questionVO.setQuestionSubjectList(questionSubjects);
}
return questionVO;
} }
/** /**

View File

@ -6,10 +6,8 @@ import com.xinelu.manage.dto.manualfollowup.ManualFollowUpDTO;
import com.xinelu.manage.dto.patientquestionsubmitresult.PatientQuestionSubmitResultDTO; import com.xinelu.manage.dto.patientquestionsubmitresult.PatientQuestionSubmitResultDTO;
import com.xinelu.manage.vo.manualfollowup.ManualFollowUpVO; import com.xinelu.manage.vo.manualfollowup.ManualFollowUpVO;
import com.xinelu.manage.vo.signpatientmanageroute.SignPatientManageRouteVO; import com.xinelu.manage.vo.signpatientmanageroute.SignPatientManageRouteVO;
import java.util.List; import java.util.List;
/** /**
* 签约患者管理任务路径Service接口 * 签约患者管理任务路径Service接口
* *
@ -85,4 +83,11 @@ public interface ISignPatientManageRouteService {
* @return 结果 * @return 结果
*/ */
AjaxResult addPatientQuestionResult(PatientQuestionSubmitResultDTO dto); AjaxResult addPatientQuestionResult(PatientQuestionSubmitResultDTO dto);
/**
* 根据患者主键查询患者任务列表
* @param signPatientManageRoute 签约患者管理任务路径
* @return 任务列表
*/
List<SignPatientManageRoute> getRouteList(SignPatientManageRoute signPatientManageRoute);
} }

View File

@ -8,6 +8,7 @@ import com.xinelu.common.exception.ServiceException;
import com.xinelu.common.utils.AgeUtil; import com.xinelu.common.utils.AgeUtil;
import com.xinelu.common.utils.SecurityUtils; import com.xinelu.common.utils.SecurityUtils;
import com.xinelu.common.utils.bean.BeanUtils; import com.xinelu.common.utils.bean.BeanUtils;
import com.xinelu.manage.domain.patientinfo.PatientInfo;
import com.xinelu.manage.domain.patientquestionoptionresult.PatientQuestionOptionResult; import com.xinelu.manage.domain.patientquestionoptionresult.PatientQuestionOptionResult;
import com.xinelu.manage.domain.patientquestionsubjectresult.PatientQuestionSubjectResult; import com.xinelu.manage.domain.patientquestionsubjectresult.PatientQuestionSubjectResult;
import com.xinelu.manage.domain.patientquestionsubmitresult.PatientQuestionSubmitResult; import com.xinelu.manage.domain.patientquestionsubmitresult.PatientQuestionSubmitResult;
@ -19,6 +20,7 @@ import com.xinelu.manage.dto.manualfollowup.ManualFollowUpDTO;
import com.xinelu.manage.dto.patientquestionoptionresult.PatientQuestionOptionResultDTO; import com.xinelu.manage.dto.patientquestionoptionresult.PatientQuestionOptionResultDTO;
import com.xinelu.manage.dto.patientquestionsubjectresult.PatientQuestionSubjectResultDTO; import com.xinelu.manage.dto.patientquestionsubjectresult.PatientQuestionSubjectResultDTO;
import com.xinelu.manage.dto.patientquestionsubmitresult.PatientQuestionSubmitResultDTO; import com.xinelu.manage.dto.patientquestionsubmitresult.PatientQuestionSubmitResultDTO;
import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper;
import com.xinelu.manage.mapper.patientquestionoptionresult.PatientQuestionOptionResultMapper; import com.xinelu.manage.mapper.patientquestionoptionresult.PatientQuestionOptionResultMapper;
import com.xinelu.manage.mapper.patientquestionsubjectresult.PatientQuestionSubjectResultMapper; import com.xinelu.manage.mapper.patientquestionsubjectresult.PatientQuestionSubjectResultMapper;
import com.xinelu.manage.mapper.patientquestionsubmitresult.PatientQuestionSubmitResultMapper; import com.xinelu.manage.mapper.patientquestionsubmitresult.PatientQuestionSubmitResultMapper;
@ -65,6 +67,8 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout
private PatientQuestionOptionResultMapper patientQuestionOptionResultMapper; private PatientQuestionOptionResultMapper patientQuestionOptionResultMapper;
@Resource @Resource
private SignRouteTriggerConditionMapper signRouteTriggerConditionMapper; private SignRouteTriggerConditionMapper signRouteTriggerConditionMapper;
@Resource
private PatientInfoMapper patientInfoMapper;
/** /**
* 查询签约患者管理任务路径 * 查询签约患者管理任务路径
@ -299,7 +303,21 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout
return AjaxResult.success(); return AjaxResult.success();
} }
/** @Override public List<SignPatientManageRoute> getRouteList(SignPatientManageRoute signPatientManageRoute) {
// 查询患者最新一条签约记录
if (signPatientManageRoute.getPatientId() == null) {
throw new ServiceException("请选择正确的患者");
}
PatientInfo patientInfo = patientInfoMapper.selectPatientInfoById(signPatientManageRoute.getPatientId());
if (ObjectUtils.isEmpty(patientInfo)) {
throw new ServiceException("请选择正确的患者");
}
SignPatientManageRoute routeQuery = new SignPatientManageRoute();
routeQuery.setSignPatientRecordId(patientInfo.getSignPatientRecordId());
return signPatientManageRouteMapper.selectSignPatientManageRouteList(routeQuery);
}
/**
* 新增患者管理任务执行记录 * 新增患者管理任务执行记录
*/ */
private Long insertPatientTaskExecuteRecord(PatientQuestionSubmitResultDTO dto, String routeHandlePerson, LocalDateTime time) { private Long insertPatientTaskExecuteRecord(PatientQuestionSubmitResultDTO dto, String routeHandlePerson, LocalDateTime time) {

View File

@ -1,21 +1,35 @@
package com.xinelu.manage.service.signpatientmanageroutenode.impl; package com.xinelu.manage.service.signpatientmanageroutenode.impl;
import com.alibaba.fastjson2.JSONObject;
import com.xinelu.common.constant.TaskContentConstants;
import com.xinelu.common.exception.ServiceException; import com.xinelu.common.exception.ServiceException;
import com.xinelu.common.utils.StringUtils;
import com.xinelu.common.utils.bean.BeanUtils;
import com.xinelu.manage.domain.patientinfo.PatientInfo; import com.xinelu.manage.domain.patientinfo.PatientInfo;
import com.xinelu.manage.domain.scriptInfo.ScriptInfo;
import com.xinelu.manage.domain.signpatientmanageroute.SignPatientManageRoute; import com.xinelu.manage.domain.signpatientmanageroute.SignPatientManageRoute;
import com.xinelu.manage.domain.signpatientmanageroutenode.SignPatientManageRouteNode; import com.xinelu.manage.domain.signpatientmanageroutenode.SignPatientManageRouteNode;
import com.xinelu.manage.dto.signpatientmanageroutenode.PatientTaskDto; import com.xinelu.manage.dto.signpatientmanageroutenode.PatientTaskDto;
import com.xinelu.manage.dto.signpatientmanageroutenode.RouteNodeCheckDto; import com.xinelu.manage.dto.signpatientmanageroutenode.RouteNodeCheckDto;
import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper; import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper;
import com.xinelu.manage.mapper.scriptInfo.ScriptInfoMapper;
import com.xinelu.manage.mapper.signpatientmanageroute.SignPatientManageRouteMapper; import com.xinelu.manage.mapper.signpatientmanageroute.SignPatientManageRouteMapper;
import com.xinelu.manage.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper; import com.xinelu.manage.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper;
import com.xinelu.manage.service.propagandainfo.IPropagandaInfoService;
import com.xinelu.manage.service.questioninfo.IQuestionInfoService;
import com.xinelu.manage.service.signpatientmanageroutenode.ISignPatientManageRouteNodeService; import com.xinelu.manage.service.signpatientmanageroutenode.ISignPatientManageRouteNodeService;
import com.xinelu.manage.vo.propagandainfo.PropagandaMaterialsVo;
import com.xinelu.manage.vo.questionInfo.QuestionVO;
import com.xinelu.manage.vo.signpatientmanageroutenode.PatientTaskVo; import com.xinelu.manage.vo.signpatientmanageroutenode.PatientTaskVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageRouteNodeInfoVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageRouteNodeVo; import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageRouteNodeVo;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -34,6 +48,12 @@ public class SignPatientManageRouteNodeServiceImpl implements ISignPatientManage
private PatientInfoMapper patientInfoMapper; private PatientInfoMapper patientInfoMapper;
@Resource @Resource
private SignPatientManageRouteMapper signRouteMapper; private SignPatientManageRouteMapper signRouteMapper;
@Resource
private ScriptInfoMapper scriptInfoMapper;
@Resource
private IQuestionInfoService questionInfoService;
@Resource
private IPropagandaInfoService propagandaInfoService;
/** /**
* 查询签约患者管理任务路径节点 * 查询签约患者管理任务路径节点
@ -59,23 +79,55 @@ public class SignPatientManageRouteNodeServiceImpl implements ISignPatientManage
if (patientTaskDto.getPatientId() == null || ObjectUtils.isEmpty(patientInfo)) { if (patientTaskDto.getPatientId() == null || ObjectUtils.isEmpty(patientInfo)) {
throw new ServiceException("请选择患者!"); throw new ServiceException("请选择患者!");
} }
// 查询任务列表 if (StringUtils.isBlank(patientTaskDto.getRouteCheckStatus())) {
SignPatientManageRoute signPatientManageRoute = new SignPatientManageRoute(); throw new ServiceException("请选择审核状态!");
signPatientManageRoute.setSignPatientRecordId(patientTaskDto.getSignPatientRecordId()); }
signPatientManageRoute.setPatientId(patientTaskDto.getPatientId()); if (StringUtils.isBlank(patientTaskDto.getTaskCreateType())) {
signPatientManageRoute.setTaskCreateType(patientTaskDto.getTaskCreateType()); throw new ServiceException("请选择任务创建类型!");
List<SignPatientManageRoute> signRoutes = signRouteMapper.selectSignPatientManageRouteList(signPatientManageRoute); }
for (SignPatientManageRoute route : signRoutes) { // 根据任务创建类型审核状态查询节点列表
SignPatientManageRouteNode nodeQuery = new SignPatientManageRouteNode(); List<SignPatientManageRouteNode> allNodeList = signPatientManageRouteNodeMapper.getNodeList(patientTaskDto);
nodeQuery.setManageRouteId(route.getId()); // 根据任务id进行分组
List<SignPatientManageRouteNode> nodeList = signPatientManageRouteNodeMapper.selectSignPatientManageRouteNodeList(nodeQuery); Map<Long, List<SignPatientManageRouteNode>> groupByRoute = allNodeList.stream().collect(Collectors.groupingBy(SignPatientManageRouteNode::getManageRouteId));
retList.add(SignPatientManageRouteNodeVo.builder().manageRouteId(route.getId()) List<SignPatientManageRouteNodeInfoVo> nodeInfoVoList = new ArrayList<>();
.routeName(route.getRouteName()) for (Long manageRouteId : groupByRoute.keySet()) {
.taskCreateType(route.getTaskCreateType()) List<SignPatientManageRouteNode> nodeList = groupByRoute.get(manageRouteId);
.suitRange(route.getSuitRange()) SignPatientManageRoute manageRoute = signRouteMapper.selectSignPatientManageRouteById(manageRouteId);
.nodeList(nodeList).build()); // 查询模板内容
for (SignPatientManageRouteNode node : nodeList) {
SignPatientManageRouteNodeInfoVo signNodeInfo = new SignPatientManageRouteNodeInfoVo();
BeanUtils.copyBeanProp(signNodeInfo, node);
JSONObject detailInfo = new JSONObject();
switch (node.getTaskType()) {
case TaskContentConstants.PHONE_OUTBOUND: // 电话外呼-查询话术表
if (node.getPhoneId() != null) {
ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(node.getPhoneId());
detailInfo = JSONObject.parseObject(JSONObject.toJSONString(scriptInfo));
}
break;
case (TaskContentConstants.QUESTIONNAIRE_SCALE): // 问卷量表-返回问卷信息
case (TaskContentConstants.ARTIFICIAL_FOLLOW_UP): // 人工随访-返回问卷信息
if (node.getQuestionInfoId() != null) {
QuestionVO questionVO = questionInfoService.selectQuestionInfoById(node.getQuestionInfoId());
detailInfo = JSONObject.parseObject(JSONObject.toJSONString(questionVO));
}
break;
case (TaskContentConstants.PROPAGANDA_ARTICLE): // 宣教文章-返回宣教库信息
if (node.getPropagandaInfoId() != null) {
PropagandaMaterialsVo propagandaMaterialsVo = propagandaInfoService.selectPropagandaInfoById(node.getPropagandaInfoId());
detailInfo = JSONObject.parseObject(JSONObject.toJSONString(propagandaMaterialsVo));
}
break;
}
signNodeInfo.setDetailInfo(detailInfo);
nodeInfoVoList.add(signNodeInfo);
}
retList.add(SignPatientManageRouteNodeVo.builder().manageRouteId(manageRouteId)
.routeName(manageRoute.getRouteName())
.taskCreateType(manageRoute.getTaskCreateType())
.suitRange(manageRoute.getSuitRange())
.nodeList(nodeInfoVoList).build());
} }
return retList; return retList;
} }
@ -149,11 +201,13 @@ public class SignPatientManageRouteNodeServiceImpl implements ISignPatientManage
@Transactional @Transactional
public int audit(RouteNodeCheckDto routeNodeCheckDto) { public int audit(RouteNodeCheckDto routeNodeCheckDto) {
int flag = 0; int flag = 0;
if (CollectionUtils.isEmpty(routeNodeCheckDto.getManageRouteNodeIds())) {
throw new ServiceException("没有要审核的任务");
}
// 根据manageRouteId查询所有节点 // 根据manageRouteId查询所有节点
SignPatientManageRouteNode nodeQuery = new SignPatientManageRouteNode(); for (Long nodeId : routeNodeCheckDto.getManageRouteNodeIds()) {
nodeQuery.setManageRouteId(routeNodeCheckDto.getManageRouteId()); SignPatientManageRouteNode node = new SignPatientManageRouteNode();
List<SignPatientManageRouteNode> nodeList = signPatientManageRouteNodeMapper.selectSignPatientManageRouteNodeList(nodeQuery); node.setId(nodeId);
for (SignPatientManageRouteNode node : nodeList) {
node.setRouteCheckStatus(routeNodeCheckDto.getRouteCheckStatus()); node.setRouteCheckStatus(routeNodeCheckDto.getRouteCheckStatus());
node.setRouteCheckPerson(routeNodeCheckDto.getRouteCheckPerson()); node.setRouteCheckPerson(routeNodeCheckDto.getRouteCheckPerson());
node.setRouteCheckDate(LocalDateTime.now()); node.setRouteCheckDate(LocalDateTime.now());

View File

@ -142,6 +142,7 @@ public class SignPatientRecordServiceImpl implements ISignPatientRecordService {
flag = signPatientRecordMapper.updateByPrimaryKeySelective(signPatientRecord); flag = signPatientRecordMapper.updateByPrimaryKeySelective(signPatientRecord);
} else { } else {
signPatientRecord.setId(null); signPatientRecord.setId(null);
signPatientRecord.setPatientVisitRecordId(patient.getPatientVisitRecordId());
flag = signPatientRecordMapper.insert(signPatientRecord); flag = signPatientRecordMapper.insert(signPatientRecord);
} }
// 签约信息保存到患者表 // 签约信息保存到患者表

View File

@ -0,0 +1,173 @@
package com.xinelu.manage.vo.patientvisitrecord;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xinelu.common.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDate;
import java.time.LocalDateTime;
import lombok.Data;
/**
* @description: 患者就诊记录信息查询返回视图类
* @author: haown
* @create: 2024-04-12 13:41
**/
@Data
public class PatientVisitRecordVo {
/**
* 患者主键
*/
@ApiModelProperty(value = "患者信息表id")
private Long patientId;
/**
* 居民信息表id
*/
@ApiModelProperty(value = "居民信息表id")
private Long residentId;
/**
* 患者姓名
*/
@ApiModelProperty(value = "患者姓名")
@Excel(name = "患者姓名")
private String patientName;
/**
* 患者电话
*/
@ApiModelProperty(value = "患者电话")
@Excel(name = "患者电话")
private String patientPhone;
/**
* 家属电话
*/
@ApiModelProperty(value = "家属电话")
private String familyMemberPhone;
/**
* 出生日期格式yyyy-MM-dd
*/
@ApiModelProperty(value = "出生日期格式yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate birthDate;
/**
* 身份证号
*/
@ApiModelProperty(value = "身份证号")
private String cardNo;
/**
* 性别MALEFEMALE
*/
@ApiModelProperty(value = "性别MALEFEMALE")
private String sex;
/**
* 住址
*/
@ApiModelProperty(value = "住址")
private String address;
/**
* 所属医院id
*/
@ApiModelProperty(value = "所属医院id")
private Long hospitalAgencyId;
/**
* 所属医院名称
*/
@ApiModelProperty(value = "所属医院名称")
private String hospitalAgencyName;
/**
* 所属院区id
*/
@ApiModelProperty(value = "所属院区id")
private Long campusAgencyId;
/**
* 所属院区名称
*/
@ApiModelProperty(value = "所属院区名称")
private String campusAgencyName;
/**
* 所属科室id
*/
@ApiModelProperty(value = "所属科室id")
private Long departmentId;
/**
* 所属科室名称
*/
@ApiModelProperty(value = "所属科室名称")
private String departmentName;
/**
* 所属病区id
*/
@ApiModelProperty(value = "所属病区id")
private Long wardId;
/**
* 所属病区名称
*/
@ApiModelProperty(value = "所属病区名称")
private String wardName;
/**
* 患者来源微信小程序WE_CHAT_APPLET微信公众号WE_CHAT_OFFICIAL_ACCOUNT管理端MANAGE_END
*/
@ApiModelProperty(value = "患者来源微信小程序WE_CHAT_APPLET微信公众号WE_CHAT_OFFICIAL_ACCOUNT管理端MANAGE_END")
private String patientSource;
/**
* 就诊记录表主键
* */
@ApiModelProperty(value = "就诊记录表主键")
private Long patientVisitRecordId;
/** 就诊类型门诊OUTPATIENT_SERVICE住院BE_IN_HOSPITAL */
@ApiModelProperty(value = "就诊类型门诊OUTPATIENT_SERVICE住院BE_IN_HOSPITAL")
private String visitMethod;
/** 就诊时间格式yyyy-MM-dd HH:mm:ss */
@ApiModelProperty(value = "就诊时间格式yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime visitDate;
/** 主要诊断 */
@ApiModelProperty(value = "主要诊断")
private String mainDiagnosis;
/** 入院时间 */
@ApiModelProperty(value = "入院时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime admissionTime;
/** 出院时间 */
@ApiModelProperty(value = "出院时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime dischargeTime;
/** 入院病历信息,存储患者入院的整个病历信息 */
@ApiModelProperty(value = "入院病历信息,存储患者入院的整个病历信息")
private String inHospitalInfo;
/** 出院病历信息,存储患者出院的整个病历信息 */
@ApiModelProperty(value = "出院病历信息,存储患者出院的整个病历信息")
private String outHospitalInfo;
/** 手术名称 */
@ApiModelProperty(value = "手术名称")
private String surgicalName;
/** 手术记录 */
@ApiModelProperty(value = "手术记录")
private String surgicalRecord;
}

View File

@ -112,6 +112,12 @@ public class PatientTaskVo {
@Excel(name = "所属病区名称") @Excel(name = "所属病区名称")
private String wardName; private String wardName;
/**
* 最新一条就诊记录id
*/
@ApiModelProperty(value = "最新一条就诊记录id")
private Long patientVisitRecordId;
/** 门诊/住院号 */ /** 门诊/住院号 */
@ApiModelProperty(value = "门诊/住院号 ") @ApiModelProperty(value = "门诊/住院号 ")
private String inHospitalNumber; private String inHospitalNumber;
@ -128,6 +134,9 @@ public class PatientTaskVo {
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime dischargeTime; private LocalDateTime dischargeTime;
@ApiModelProperty(value = "患者来源微信小程序WE_CHAT_APPLET微信公众号WE_CHAT_OFFICIAL_ACCOUNT管理端MANAGE_END")
private String patientSource;
/** 手术名称 */ /** 手术名称 */
@ApiModelProperty(value = "手术名称") @ApiModelProperty(value = "手术名称")
private String surgicalName; private String surgicalName;

View File

@ -0,0 +1,206 @@
package com.xinelu.manage.vo.signpatientmanageroutenode;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xinelu.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalTime;
import lombok.Data;
/**
* @description: 任务节点详细信息视图类
* @author: haown
* @create: 2024-04-12 17:15
**/
@ApiModel("任务节点详细信息视图类")
@Data
public class SignPatientManageRouteNodeInfoVo {
/** 主键id */
private Long id;
/** 签约患者管理任务表id */
@ApiModelProperty(value = "签约患者管理任务表id")
@Excel(name = "签约患者管理任务表id")
private Long manageRouteId;
/** 路径名称(任务名称) */
@ApiModelProperty(value = "路径名称")
@Excel(name = "路径名称", readConverterExp = "任=务名称")
private String manageRouteName;
/** 管理路径节点名称 */
@ApiModelProperty(value = "管理路径节点名称")
@Excel(name = "管理路径节点名称")
private String routeNodeName;
/** 管理路径节点时间,时间单位为:天 */
@ApiModelProperty(value = "管理路径节点时间,时间单位为:天")
@Excel(name = "管理路径节点时间,时间单位为:天")
private Integer routeNodeDay;
/** 任务类型电话外呼PHONE_OUTBOUND问卷量表QUESTIONNAIRE_SCALE宣教文章PROPAGANDA_ARTICLE文字提醒TEXT_REMIND人工随访ARTIFICIAL_FOLLOW_UP */
@ApiModelProperty(value = "任务类型电话外呼PHONE_OUTBOUND问卷量表QUESTIONNAIRE_SCALE宣教文章PROPAGANDA_ARTICLE文字提醒TEXT_REMIND人工随访ARTIFICIAL_FOLLOW_UP")
@Excel(name = "任务类型电话外呼PHONE_OUTBOUND问卷量表QUESTIONNAIRE_SCALE宣教文章PROPAGANDA_ARTICLE文字提醒TEXT_REMIND人工随访ARTIFICIAL_FOLLOW_UP")
private String taskType;
/** 任务状态 */
@ApiModelProperty(value = "任务状态")
@Excel(name = "任务状态")
private String taskStatus;
/** 任务细分 */
@ApiModelProperty(value = "任务细分")
@Excel(name = "任务细分")
private String taskSubdivision;
/** 二级分类描述 */
@ApiModelProperty(value = "二级分类描述")
@Excel(name = "二级分类描述")
private String secondClassifyDescribe;
/** 执行时间格式HH:mm */
@ApiModelProperty(value = "执行时间格式HH:mm")
@JsonFormat(pattern = "HH:mm")
@Excel(name = "执行时间格式HH:mm", width = 30, dateFormat = "yyyy-MM-dd")
private LocalTime executeTime;
/** 电话推送标识0未开启1已开启 */
@ApiModelProperty(value = "电话推送标识0未开启1已开启")
@Excel(name = "电话推送标识0未开启1已开启")
private Integer phonePushSign;
/** 电话话术表id */
@ApiModelProperty(value = "电话话术表id")
@Excel(name = "电话话术表id")
private Long phoneId;
/** 电话模板ID */
@ApiModelProperty(value = "电话模板ID")
@Excel(name = "电话模板ID")
private String phoneTemplateId;
/** 问卷表id */
@ApiModelProperty(value = "问卷表id")
@Excel(name = "问卷表id")
private Long questionInfoId;
/** 问卷模板名称 */
@ApiModelProperty(value = "问卷模板名称")
@Excel(name = "问卷模板名称")
private String questionnaireName;
/** 问卷模板内容(富文本存放整个节点的信息,包含标签画像的名称以及其它,标签画像名称使用特殊符号进行标记) */
@ApiModelProperty(value = "问卷模板内容")
@Excel(name = "问卷模板内容", readConverterExp = "富=文本存放整个节点的信息,包含标签画像的名称以及其它,标签画像名称使用特殊符号进行标记")
private String questionnaireContent;
/** 问卷有效期,单位:天 */
@ApiModelProperty(value = "问卷有效期,单位:天")
@Excel(name = "问卷有效期,单位:天")
private Integer questionExpirationDate;
/** 宣教文章表id */
@ApiModelProperty(value = "宣教文章表id")
@Excel(name = "宣教文章表id")
private Long propagandaInfoId;
/** 宣教文章模板标题(宣教模板名称) */
@ApiModelProperty(value = "宣教文章模板标题")
@Excel(name = "宣教文章模板标题", readConverterExp = "宣=教模板名称")
private String propagandaTitle;
/** 宣教文章内容(富文本存放整个节点的信息,包含标签画像的名称以及其它,标签画像名称使用特殊符号进行标记) */
@ApiModelProperty(value = "宣教文章内容")
@Excel(name = "宣教文章内容", readConverterExp = "富=文本存放整个节点的信息,包含标签画像的名称以及其它,标签画像名称使用特殊符号进行标记")
private String propagandaContent;
/** 短信推送标识0未开启1已开启 */
@ApiModelProperty(value = "短信推送标识0未开启1已开启")
@Excel(name = "短信推送标识0未开启1已开启")
private Integer messagePushSign;
/** 短信模板表id */
@ApiModelProperty(value = "短信模板表id")
@Excel(name = "短信模板表id")
private Long messageTemplateId;
/** 公众号推送标识0未开启1已开启 */
@ApiModelProperty(value = "公众号推送标识0未开启1已开启")
@Excel(name = "公众号推送标识0未开启1已开启")
private Integer officialPushSign;
/** 公众号模板表id */
@ApiModelProperty(value = "公众号模板表id")
@Excel(name = "公众号模板表id")
private Long officialTemplateId;
/** 公众号模板名称 */
@ApiModelProperty(value = "公众号模板名称")
@Excel(name = "公众号模板名称")
private String officialTemplateName;
/** 公众号提醒内容 */
@ApiModelProperty(value = "公众号提醒内容")
@Excel(name = "公众号提醒内容")
private String officialRemindContent;
/** 公众号节点内容(富文本存放整个节点的信息,包含标签画像的名称以及其它,标签画像名称使用特殊符号进行标记) */
@ApiModelProperty(value = "公众号节点内容")
@Excel(name = "公众号节点内容", readConverterExp = "富=文本存放整个节点的信息,包含标签画像的名称以及其它,标签画像名称使用特殊符号进行标记")
private String officialNodeContent;
/** 小程序推送标识0未开启1已开启 */
@ApiModelProperty(value = "小程序推送标识0未开启1已开启")
@Excel(name = "小程序推送标识0未开启1已开启")
private Integer appletPushSign;
/** 小程序模板表id */
@ApiModelProperty(value = "小程序模板表id")
@Excel(name = "小程序模板表id")
private Long appletTemplateId;
/** 小程序模板名称 */
@ApiModelProperty(value = "小程序模板名称")
@Excel(name = "小程序模板名称")
private String appletTemplateName;
/** 小程序提醒内容 */
@ApiModelProperty(value = "小程序提醒内容")
@Excel(name = "小程序提醒内容")
private String appletRemindContent;
/** 小程序提示说明 */
@ApiModelProperty(value = "小程序提示说明")
@Excel(name = "小程序提示说明")
private String appletPromptDescription;
/** 小程序节点内容(富文本存放整个节点的信息,包含标签画像的名称以及其它,标签画像名称使用特殊符号进行标记) */
@ApiModelProperty(value = "小程序节点内容")
@Excel(name = "小程序节点内容", readConverterExp = "富=文本存放整个节点的信息,包含标签画像的名称以及其它,标签画像名称使用特殊符号进行标记")
private String appletNodeContent;
/** 人工随访模板表id */
@ApiModelProperty(value = "人工随访模板表id")
@Excel(name = "人工随访模板表id")
private Long followTemplateId;
/** 人工随访模板名称 */
@ApiModelProperty(value = "人工随访模板名称")
@Excel(name = "人工随访模板名称")
private String followTemplateName;
/** 人工随访模板内容(富文本存放整个节点的信息,包含标签画像的名称以及其它,标签画像名称使用特殊符号进行标记) */
@ApiModelProperty(value = "人工随访模板内容")
@Excel(name = "人工随访模板内容", readConverterExp = "富=文本存放整个节点的信息,包含标签画像的名称以及其它,标签画像名称使用特殊符号进行标记")
private String followContent;
/** 文字提醒内容 */
@ApiModelProperty(value = "文字提醒内容")
@Excel(name = "文字提醒内容")
private String textRemindContent;
/** 详细信息 */
@ApiModelProperty(value = "详细信息")
private JSONObject detailInfo;
}

View File

@ -1,6 +1,5 @@
package com.xinelu.manage.vo.signpatientmanageroutenode; package com.xinelu.manage.vo.signpatientmanageroutenode;
import com.xinelu.manage.domain.signpatientmanageroutenode.SignPatientManageRouteNode;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.util.List; import java.util.List;
@ -41,5 +40,5 @@ public class SignPatientManageRouteNodeVo {
* 节点列表 * 节点列表
*/ */
@ApiModelProperty(value = "节点列表") @ApiModelProperty(value = "节点列表")
List<SignPatientManageRouteNode> nodeList; List<SignPatientManageRouteNodeInfoVo> nodeList;
} }

View File

@ -90,11 +90,24 @@
order by visit_date desc order by visit_date desc
</select> </select>
<select id="selectPatientVisitRecordById" parameterType="Long" <select id="selectPatientVisitRecordById" parameterType="Long"
resultMap="PatientVisitRecordResult"> resultMap="PatientVisitRecordResult">
<include refid="selectPatientVisitRecordVo"/> <include refid="selectPatientVisitRecordVo"/>
where id = #{id} where id = #{id}
</select> </select>
<select id="getByPatientId" parameterType="Long"
resultType="com.xinelu.manage.vo.patientvisitrecord.PatientVisitRecordVo">
select patient.id as patientId, patient.resident_id, patient.patient_name, patient.patient_phone, patient.family_member_phone,
patient.birth_date, patient.card_no, patient.sex, patient.address, patient.visit_method,
patient.hospital_agency_id, patient.hospital_agency_name, patient.campus_agency_id, patient.campus_agency_name,
patient.department_id, patient.department_name, patient.ward_id, patient.ward_name, patient.patient_source,
record.id as patientVisitRecordId, record.visit_method, record.visit_date, record.main_diagnosis,
record.admission_time, record.discharge_time, record.in_hospital_info, record.out_hospital_info, record.surgical_name, record.surgical_record
from patient_info patient
left join patient_visit_record record on patient.patient_visit_record_id = record.id
where patient.id = #{patientId}
</select>
<insert id="insertPatientVisitRecord" parameterType="PatientVisitRecord" useGeneratedKeys="true" <insert id="insertPatientVisitRecord" parameterType="PatientVisitRecord" useGeneratedKeys="true"
keyProperty="id"> keyProperty="id">
@ -463,21 +476,22 @@
#{item.updateTime,jdbcType=TIMESTAMP}) #{item.updateTime,jdbcType=TIMESTAMP})
</foreach> </foreach>
</insert> </insert>
<select id="judgeRepeat" resultMap="PatientVisitRecordResult">
<include refid="selectPatientVisitRecordVo"/>
where del_flag = 0
and hospital_agency_id = #{hospitalAgencyId,jdbcType=BIGINT}
and in_hospital_number = #{inHospitalNumber,jdbcType=VARCHAR}
<if test="cardNo != null">
and card_no != #{cardNo,jdbcType=VARCHAR}
</if>
</select>
<select id="getLastRecord" resultMap="PatientVisitRecordResult"> <select id="getLastRecord" resultMap="PatientVisitRecordResult">
<include refid="selectPatientVisitRecordVo"/> <include refid="selectPatientVisitRecordVo"/>
where del_flag = 0 where del_flag = 0
AND hospital_agency_id = #{hospitalAgencyId,jdbcType=BIGINT} <where>
AND patient_id = #{patientId,jdbcType=BIGINT} <if test="patientId != null">
ORDER BY id desc AND patient_id = #{patientId,jdbcType=BIGINT}
</if>
<if test="hospitalAgencyId != null">
and hospital_agency_id = #{hospitalAgencyId,jdbcType=BIGINT}
</if>
<if test="inHospitalNumber != null">
and in_hospital_number = #{inHospitalNumber,jdbcType=VARCHAR}
</if>
<if test="cardNo != null">
and card_no != #{cardNo,jdbcType=VARCHAR}
</if>
</where>
</select> </select>
</mapper> </mapper>

View File

@ -124,8 +124,21 @@
<if test="taskType != null and taskType != ''"> <if test="taskType != null and taskType != ''">
and node.task_type = #{taskType} and node.task_type = #{taskType}
</if> </if>
<if test="taskCreateType != null and taskCreateType != ''">
and route.task_create_type = #{taskCreateType}
</if>
<choose>
<when test="routeCheckStatus != null and routeCheckStatus == 'UNAUDITED'">
and node.route_check_status is null
</when>
<when test="routeCheckStatus != null and routeCheckStatus == 'AGREE'">
and node.route_check_status = #{routeCheckStatus}
</when>
<when test="routeCheckStatus != null and routeCheckStatus == 'DISAGREE'">
and node.route_check_status = #{routeCheckStatus}
</when>
</choose>
</where> </where>
order by node.id desc
</select> </select>
<insert id="insertSignPatientManageRouteNode" parameterType="SignPatientManageRouteNode" useGeneratedKeys="true" <insert id="insertSignPatientManageRouteNode" parameterType="SignPatientManageRouteNode" useGeneratedKeys="true"
@ -609,8 +622,8 @@
patient.address, patient.address,
patient.patient_type, patient.visit_method, patient.attending_physician_id, patient.attending_physician_name, patient.main_diagnosis, patient.patient_type, patient.visit_method, patient.attending_physician_id, patient.attending_physician_name, patient.main_diagnosis,
patient.hospital_agency_id, patient.hospital_agency_name, patient.campus_agency_id, patient.campus_agency_name, patient.hospital_agency_id, patient.hospital_agency_name, patient.campus_agency_id, patient.campus_agency_name,
patient.department_id, patient.department_name,patient.ward_id, patient.ward_name, patient.in_hospital_number, patient.visit_date, patient.discharge_time, patient.department_id, patient.department_name,patient.ward_id, patient.ward_name, patient.patient_visit_record_id,patient.in_hospital_number, patient.visit_date, patient.discharge_time,
patient.surgical_name,patient.sign_patient_record_id, node.id as manageRouteNodeId, node.manage_route_id, node.manage_route_name,node.route_check_status patient.patient_source, patient.surgical_name,route.sign_patient_record_id, node.id as manageRouteNodeId, node.manage_route_id, node.manage_route_name,node.route_check_status
from sign_patient_manage_route_node node from sign_patient_manage_route_node node
left join sign_patient_manage_route route on node.manage_route_id = route.id left join sign_patient_manage_route route on node.manage_route_id = route.id
left join patient_info patient on route.patient_id = patient.id left join patient_info patient on route.patient_id = patient.id
@ -622,12 +635,15 @@
and patient.main_diagnosis like concat('%', #{mainDiagnosis}, '%') and patient.main_diagnosis like concat('%', #{mainDiagnosis}, '%')
</if> </if>
<choose> <choose>
<when test="routeCheckStatus != null"> <when test="routeCheckStatus != null and routeCheckStatus == 'UNAUDITED'">
and node.route_check_status is null
</when>
<when test="routeCheckStatus != null and routeCheckStatus == 'AGREE'">
and node.route_check_status = #{routeCheckStatus}
</when>
<when test="routeCheckStatus != null and routeCheckStatus == 'DISAGREE'">
and node.route_check_status = #{routeCheckStatus} and node.route_check_status = #{routeCheckStatus}
</when> </when>
<otherwise>
and node.route_check_status is null
</otherwise>
</choose> </choose>
<if test="hospitalAgencyId != null "> <if test="hospitalAgencyId != null ">
and patient.hospital_agency_id = #{hospitalAgencyId} and patient.hospital_agency_id = #{hospitalAgencyId}
@ -648,6 +664,6 @@
and date_format(patient.discharge_time,'%y%m%d') &lt;= date_format(#{dischargeTimeEnd},'%y%m%d') and date_format(patient.discharge_time,'%y%m%d') &lt;= date_format(#{dischargeTimeEnd},'%y%m%d')
</if> </if>
</where> </where>
group by patient_id group by patient.hospital_agency_id, patient.id
</select> </select>
</mapper> </mapper>

View File

@ -21,6 +21,7 @@
<result property="departmentName" column="department_name" jdbcType="VARCHAR"/> <result property="departmentName" column="department_name" jdbcType="VARCHAR"/>
<result property="wardId" column="ward_id" jdbcType="BIGINT"/> <result property="wardId" column="ward_id" jdbcType="BIGINT"/>
<result property="wardName" column="ward_name" jdbcType="VARCHAR"/> <result property="wardName" column="ward_name" jdbcType="VARCHAR"/>
<result property="patientVisitRecordId" column="patient_visit_record_id" jdbcType="BIGINT"/>
<result property="visitSerialNumber" column="visit_serial_number" jdbcType="VARCHAR"/> <result property="visitSerialNumber" column="visit_serial_number" jdbcType="VARCHAR"/>
<result property="visitMethod" column="visit_method" jdbcType="VARCHAR"/> <result property="visitMethod" column="visit_method" jdbcType="VARCHAR"/>
<result property="inHospitalNumber" column="in_hospital_number" jdbcType="VARCHAR"/> <result property="inHospitalNumber" column="in_hospital_number" jdbcType="VARCHAR"/>
@ -48,7 +49,7 @@
patient_phone,card_no,sex,birth_date,sign_time, patient_phone,card_no,sex,birth_date,sign_time,
hospital_agency_id,hospital_agency_name,campus_agency_id, hospital_agency_id,hospital_agency_name,campus_agency_id,
campus_agency_name,department_id,department_name, campus_agency_name,department_id,department_name,
ward_id,ward_name,visit_serial_number, ward_id,ward_name,patient_visit_record_id,visit_serial_number,
visit_method,in_hospital_number,sign_diagnosis,review_diagnosis, visit_method,in_hospital_number,sign_diagnosis,review_diagnosis,
service_status,sign_status,intentional_source, service_status,sign_status,intentional_source,
intentional_time,billing_doctor_id,billing_doctor_name, intentional_time,billing_doctor_id,billing_doctor_name,
@ -74,7 +75,7 @@
,patient_phone,card_no,sex,birth_date,sign_time ,patient_phone,card_no,sex,birth_date,sign_time
,hospital_agency_id,hospital_agency_name,campus_agency_id ,hospital_agency_id,hospital_agency_name,campus_agency_id
,campus_agency_name,department_id,department_name ,campus_agency_name,department_id,department_name
,ward_id,ward_name,visit_serial_number ,ward_id,ward_name,patient_visit_record_id,visit_serial_number
,visit_method,in_hospital_number,sign_diagnosis,review_diagnosis ,visit_method,in_hospital_number,sign_diagnosis,review_diagnosis
,service_status,sign_status,intentional_source ,service_status,sign_status,intentional_source
,intentional_time,billing_doctor_id,billing_doctor_name ,intentional_time,billing_doctor_id,billing_doctor_name