Merge branch '0418_小程序开发' of http://182.92.166.109:3000/zhuangyuanke/PostDischargePatientManage into 0418_小程序开发

 Conflicts:
	postdischarge-manage/src/main/java/com/xinelu/manage/mapper/labelfieldcontent/LabelFieldContentMapper.java
	postdischarge-manage/src/main/java/com/xinelu/manage/mapper/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.java
	postdischarge-manage/src/main/resources/mapper/manage/labelfieldcontent/LabelFieldContentMapper.xml
This commit is contained in:
haown 2024-06-25 17:45:12 +08:00
commit c8bf7350a3
15 changed files with 408 additions and 63 deletions

View File

@ -0,0 +1,29 @@
package com.xinelu.common.enums;
import lombok.Getter;
/**
* @Description 画像状态
* @Author zh
* @Date 2024-06-24
*/
@Getter
public enum PortraitStatusEnum {
/**
* 已归档
*/
FIELD("FIELD"),
/**
* 在用
*/
INUSE("INUSE"),
;
final private String info;
PortraitStatusEnum(String info) {
this.info = info;
}
}

View File

@ -9,6 +9,8 @@ import com.xinelu.common.utils.poi.ExcelUtil;
import com.xinelu.manage.domain.labelfieldcontent.LabelFieldContent;
import com.xinelu.manage.dto.labelfieldcontent.LabelFieldContentAddDTO;
import com.xinelu.manage.service.labelfieldcontent.ILabelFieldContentService;
import com.xinelu.manage.vo.labelfieldcontent.GroupingValue;
import com.xinelu.manage.vo.labelfieldcontent.LabelField;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@ -94,7 +96,20 @@ public class LabelFieldContentController extends BaseController {
* 分组信息
*/
@GetMapping("/groupingContent")
public AjaxResult groupingContent(String taskPartitionDictName) {
return labelFieldContentService.groupingContent(taskPartitionDictName);
public AjaxResult groupingContent() {
return labelFieldContentService.groupingContent();
}
/**
* 画像查询
*/
@GetMapping("/groupingValue")
public List<List<GroupingValue>> groupingValue(Long taskPartitionDictId, Long patientId) {
return labelFieldContentService.groupingValue(taskPartitionDictId, patientId);
}
@PostMapping("/insertLabelField")
public AjaxResult insertLabelField(@RequestBody LabelField labelField) {
return labelFieldContentService.insertLabelField(labelField);
}
}

View File

@ -1,6 +1,7 @@
package com.xinelu.manage.mapper.labelfieldcontent;
import com.xinelu.manage.domain.labelfieldcontent.LabelFieldContent;
import com.xinelu.manage.vo.labelfieldcontent.GroupingValue;
import com.xinelu.manage.vo.labelfieldcontent.LabelFieldContentVO;
import com.xinelu.manage.vo.labelfieldcontent.LabelFieldInfoContentVo;
import java.util.List;
@ -79,6 +80,16 @@ public interface LabelFieldContentMapper {
*/
List<LabelFieldContentVO> selectLabelFieldContent(@Param("labelFieldIds") List<Long> labelFieldIds);
/**
* 画像查询
*
* @param taskPartitionDictId 细分id
* @param patientId 患者id
* @param portraitStatus 状态
* @return GroupingValue
*/
List<GroupingValue> groupingValue(@Param("taskPartitionDictId") Long taskPartitionDictId, @Param("patientId") Long patientId, @Param("portraitStatus") String portraitStatus);
/**
* 查询患者在用标签字段信息
* @param patientId 患者主键

View File

@ -27,4 +27,11 @@ public interface PatientAllInfoViewMapper {
*/
List<PatientAllInfoView> selectPatientAllInfoViewList(PatientAllInfoView patientAllInfoView);
/**
* 查询患者全部信息视图对象
*
* @param patientId 患者主键
* @return 患者全部信息视图对象
*/
List<PatientAllInfoView> selectPatientAllInfoListViewByPatientId(Long patientId);
}

View File

@ -25,12 +25,13 @@ public interface SignPatientManageRouteNodeMapper {
*/
SignPatientManageRouteNode selectSignPatientManageRouteNodeById(Long id);
/**
* 查询患者管理路径节点
* @param patientTaskDto 任务查询传输对象
* @return 患者管理任务路径节点
*/
List<SignPatientManageRouteNode> getNodeList(PatientTaskDto patientTaskDto);
/**
* 查询患者管理路径节点
*
* @param patientTaskDto 任务查询传输对象
* @return 患者管理任务路径节点
*/
List<SignPatientManageRouteNode> getNodeList(PatientTaskDto patientTaskDto);
/**
* 查询签约患者管理任务路径节点列表
@ -40,7 +41,7 @@ public interface SignPatientManageRouteNodeMapper {
*/
public List<SignPatientManageRouteNode> selectSignPatientManageRouteNodeList(SignPatientManageRouteNodeDto signPatientManageRouteNodeDto);
List<PatientManageNodeListVo> selectPatientManageNodeList(SignPatientManageRouteNodeDto signPatientManageRouteNodeDto);
List<PatientManageNodeListVo> selectPatientManageNodeList(SignPatientManageRouteNodeDto signPatientManageRouteNodeDto);
/**
* 新增签约患者管理任务路径节点
@ -50,7 +51,7 @@ public interface SignPatientManageRouteNodeMapper {
*/
public int insertSignPatientManageRouteNode(SignPatientManageRouteNode signPatientManageRouteNode);
int insertBatch(@Param("nodeList") List<SignPatientManageRouteNode> nodeList);
int insertBatch(@Param("nodeList") List<SignPatientManageRouteNode> nodeList);
/**
* 修改签约患者管理任务路径节点
@ -84,14 +85,15 @@ public interface SignPatientManageRouteNodeMapper {
*/
int deleteRouteNodeByManageRouteId(Long manageRouteId);
/**
* 查询患者任务列表
* @param patientTaskDto 患者任务列表查询传输对象
* @return 患者任务列表
*/
List<PatientTaskVo> selectPatientTaskList(PatientTaskDto patientTaskDto);
/**
* 查询患者任务列表
*
* @param patientTaskDto 患者任务列表查询传输对象
* @return 患者任务列表
*/
List<PatientTaskVo> selectPatientTaskList(PatientTaskDto patientTaskDto);
List<SignPatientManageRouteNode> selectManageRouteByResidentId(@Param("residentId") Long residentId,@Param("nodeExecuteStatus") String nodeExecuteStatus);
List<SignPatientManageRouteNode> selectManageRouteByResidentId(@Param("residentId") Long residentId, @Param("nodeExecuteStatus") String nodeExecuteStatus);
String selectNodeContent(Long manageRouteNodeId);

View File

@ -100,6 +100,12 @@ public interface SpecialDiseaseNodeMapper {
List<SpecialDiseaseNodeAuditVo> selectByRouteId(Long routeId);
/**
* 根据患者路径查询患者节点表
*
* @param specialDiseaseRouteId 患者路径
* @return Long
*/
List<Long> selectSpecialDiseaseRouteIds(Long specialDiseaseRouteId);
/**

View File

@ -1,6 +1,5 @@
package com.xinelu.manage.mapper.taskpartitiondict;
import com.xinelu.manage.domain.labelfieldinfo.LabelFieldInfo;
import com.xinelu.manage.domain.taskpartitiondict.TaskPartitionDict;
import java.util.List;

View File

@ -3,6 +3,8 @@ package com.xinelu.manage.service.labelfieldcontent;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.manage.domain.labelfieldcontent.LabelFieldContent;
import com.xinelu.manage.dto.labelfieldcontent.LabelFieldContentAddDTO;
import com.xinelu.manage.vo.labelfieldcontent.GroupingValue;
import com.xinelu.manage.vo.labelfieldcontent.LabelField;
import java.util.List;
@ -69,8 +71,18 @@ public interface ILabelFieldContentService {
/**
* 分组信息
*
* @param taskPartitionDictName 分组名
* @return LabelFieldInfo
*/
AjaxResult groupingContent(String taskPartitionDictName);
AjaxResult groupingContent();
/**
* 画像查询
*
* @param taskPartitionDictId 细分id
* @param patientId 患者id
* @return GroupingValue
*/
List<List<GroupingValue>> groupingValue(Long taskPartitionDictId, Long patientId);
AjaxResult insertLabelField(LabelField labelField);
}

View File

@ -1,19 +1,30 @@
package com.xinelu.manage.service.labelfieldcontent.impl;
import com.alibaba.fastjson2.JSONObject;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.enums.PatientSexEnum;
import com.xinelu.common.exception.ServiceException;
import com.xinelu.common.utils.BaseUtil;
import com.xinelu.common.utils.SecurityUtils;
import com.xinelu.common.utils.bean.BeanUtils;
import com.xinelu.manage.domain.labelfieldcontent.LabelFieldContent;
import com.xinelu.manage.domain.labelfieldinfo.LabelFieldInfo;
import com.xinelu.manage.domain.patientinfo.PatientAllInfoView;
import com.xinelu.manage.dto.labelfieldcontent.LabelFieldContentAddDTO;
import com.xinelu.manage.dto.labelfieldcontent.LabelFieldContentDTO;
import com.xinelu.manage.mapper.labelfieldcontent.LabelFieldContentMapper;
import com.xinelu.manage.mapper.labelfieldinfo.LabelFieldInfoMapper;
import com.xinelu.manage.mapper.patientinfo.PatientAllInfoViewMapper;
import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper;
import com.xinelu.manage.mapper.signpatientmanageroute.SignPatientManageRouteMapper;
import com.xinelu.manage.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper;
import com.xinelu.manage.mapper.specialdiseasenode.SpecialDiseaseNodeMapper;
import com.xinelu.manage.mapper.taskpartitiondict.TaskPartitionDictMapper;
import com.xinelu.manage.service.labelfieldcontent.ILabelFieldContentService;
import com.xinelu.manage.vo.labelfieldcontent.GroupingValue;
import com.xinelu.manage.vo.labelfieldcontent.LabelField;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -22,6 +33,8 @@ import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 标签字段内容信息Service业务层处理
@ -35,6 +48,8 @@ public class LabelFieldContentServiceImpl implements ILabelFieldContentService {
private LabelFieldContentMapper labelFieldContentMapper;
@Resource
private LabelFieldInfoMapper labelFieldInfoMapper;
@Resource
private PatientAllInfoViewMapper patientAllInfoViewMapper;
/**
* 查询标签字段内容信息
@ -131,7 +146,6 @@ public class LabelFieldContentServiceImpl implements ILabelFieldContentService {
BeanUtils.copyProperties(contentDTO, labelFieldContent);
labelFieldContent.setFieldId(labelFieldContentAddDTO.getFieldId());
labelFieldContent.setFieldName(labelFieldContentAddDTO.getFieldName());
//labelFieldContent.setContentCode(Constants.CONTENT_ENCODING + systemCodeUtil.generateDepartCode(Constants.CONTENT_ENCODING));
labelFieldContent.setCreateBy(SecurityUtils.getUsername());
labelFieldContent.setCreateTime(LocalDateTime.now());
if (labelFieldContentMapper.insertLabelFieldContent(labelFieldContent) <= 0) {
@ -144,27 +158,99 @@ public class LabelFieldContentServiceImpl implements ILabelFieldContentService {
/**
* 分组信息
*
* @param taskPartitionDictName 分组名
* @return LabelFieldInfo
*/
@Override
public AjaxResult groupingContent(String taskPartitionDictName) {
ArrayList<LabelFieldInfo> labelFieldInfos = new ArrayList<>();
if (StringUtils.isBlank(taskPartitionDictName)) {
LabelFieldInfo labelFieldOne = new LabelFieldInfo();
labelFieldOne.setTaskPartitionDictId(0L);
labelFieldOne.setTaskPartitionDictName("全部");
labelFieldInfos.add(labelFieldOne);
public AjaxResult groupingContent() {
//创建全部选项 TaskPartitionDictId =0为全部
List<LabelFieldInfo> labelFieldInfoList = new ArrayList<>();
LabelFieldInfo labelFieldInfo = new LabelFieldInfo();
labelFieldInfo.setTaskPartitionDictId(0L);
labelFieldInfo.setTaskPartitionDictName("全部");
labelFieldInfoList.add(labelFieldInfo);
//任务细分表数据
List<LabelFieldInfo> labelFieldInfos = labelFieldInfoMapper.taskPartitionDictIdList(null);
if (CollectionUtils.isNotEmpty(labelFieldInfos)) {
labelFieldInfoList.addAll(labelFieldInfos);
}
List<LabelFieldInfo> labelFieldInfoList = labelFieldInfoMapper.taskPartitionDictIdList(taskPartitionDictName);
if (CollectionUtils.isNotEmpty(labelFieldInfoList)) {
labelFieldInfos.addAll(labelFieldInfoList);
//未分组选项 TaskPartitionDictId =null 为未分组
LabelFieldInfo labelFieldInfoTow = new LabelFieldInfo();
labelFieldInfoTow.setTaskPartitionDictName("未分组");
labelFieldInfoList.add(labelFieldInfoTow);
return AjaxResult.success(labelFieldInfoList);
}
/**
* 画像查询
*
* @param taskPartitionDictId 细分id
* @param patientId 患者id
* @return GroupingValue
*/
@Override
public List<List<GroupingValue>> groupingValue(Long taskPartitionDictId, Long patientId) {
if (ObjectUtils.isEmpty(patientId)) {
throw new ServiceException("请选择患者!");
}
if (StringUtils.isBlank(taskPartitionDictName)) {
LabelFieldInfo labelFieldInfo = new LabelFieldInfo();
labelFieldInfo.setTaskPartitionDictName("未分组");
labelFieldInfos.add(labelFieldInfo);
//根据patientId查询是否有已经维护的参数
List<GroupingValue> labelFieldContents = labelFieldContentMapper.groupingValue(taskPartitionDictId, patientId, null);
if (CollectionUtils.isNotEmpty(labelFieldContents)) {
Map<String, List<GroupingValue>> collect = labelFieldContents.stream().collect(Collectors.groupingBy(GroupingValue::getPortraitSn));
return new ArrayList<>(collect.values());
}
return AjaxResult.success(labelFieldInfos);
//查询未维护标签及从患者表取值
List<GroupingValue> labelFieldContentList = labelFieldContentMapper.groupingValue(taskPartitionDictId, null, null);
JSONObject paramsValue = getParamsValue(patientId);
if (CollectionUtils.isEmpty(labelFieldContentList)) {
return new ArrayList<>();
}
for (GroupingValue groupingValue : labelFieldContentList) {
//获取不同的文件路径
switch (groupingValue.getFieldName()) {
case "姓名":
String s = paramsValue.getOrDefault("patientName", "").toString();
groupingValue.setFieldValue(paramsValue.getOrDefault("patientName", "").toString());
break;
case "患者电话":
groupingValue.setFieldValue(paramsValue.getOrDefault("patientPhone", "").toString());
break;
case "性别":
groupingValue.setFieldValue(paramsValue.getOrDefault("sex", "").toString());
break;
case "医院":
groupingValue.setFieldValue(paramsValue.getOrDefault("hospitalAgencyName", "").toString());
break;
default:
break;
}
}
List<List<GroupingValue>> lists = new ArrayList<>();
lists.add(labelFieldContentList);
return lists;
}
/**
* 根据任务细分类型获取患者的真实信息
*
* @param patientId 患者主键
* @return 实际信息
*/
private JSONObject getParamsValue(Long patientId) {
JSONObject retObj;
List<PatientAllInfoView> patientAllInfoViews = patientAllInfoViewMapper.selectPatientAllInfoListViewByPatientId(patientId);
if (CollectionUtils.isEmpty(patientAllInfoViews) || ObjectUtils.isEmpty(patientAllInfoViews.get(0))) {
throw new ServiceException("患者信息获取错误,请联系管理员!");
}
PatientAllInfoView patientAllInfoView = patientAllInfoViews.get(0);
retObj = JSONObject.parseObject(JSONObject.toJSONString(patientAllInfoView));
// 性别转换成中文计算年龄
retObj.fluentPut("sex", PatientSexEnum.getInfoByCode(patientAllInfoView.getSex()).getInfo()).fluentPut("age", BaseUtil.getAge(patientAllInfoView.getBirthDate()));
return retObj;
}
@Override
public AjaxResult insertLabelField(LabelField labelField) {
return null;
}
}

View File

@ -0,0 +1,81 @@
package com.xinelu.manage.vo.labelfieldcontent;
import com.xinelu.manage.domain.labelfieldinfo.LabelFieldInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 标签字段内容信息对象
*
* @author xinelu
* @date 2024-03-11
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class GroupingValue extends LabelFieldInfo {
/**
* LabelFieldInfoId
*/
private Long labelFieldInfoId;
/**
* LabelFieldInfoId
*/
private Long labelFieldContentId;
/**
* 画像标签和知识库字段表id
*/
@ApiModelProperty(value = "画像标签和知识库字段表id")
private Long fieldId;
/**
* 字段名称
*/
@ApiModelProperty(value = "字段名称")
private String fieldName;
/**
* 字段编码同param_key字段值
*/
@ApiModelProperty(value = "字段编码同param_key字段值")
private String fieldCode;
/**
* 字段值同param_value
*/
@ApiModelProperty(value = "字段值同param_value")
private String fieldValue;
/**
* 画像流水号用年月日时分秒毫秒数字转成的字符串
*/
@ApiModelProperty(value = "画像流水号,用年月日时分秒毫秒数字转成的字符串")
private String portraitSn;
/**
* 患者ID
*/
@ApiModelProperty(value = "患者ID")
private Long patientId;
/**
* 画像状态FIELD已归档INUSE在用
*/
@ApiModelProperty(value = "画像状态")
private String portraitStatus;
/**
* 内容排序
*/
@ApiModelProperty(value = "内容排序")
private Integer contentSort;
/**
* 内容备注信息
*/
@ApiModelProperty(value = "内容备注信息")
private String contentRemark;
}

View File

@ -0,0 +1,11 @@
package com.xinelu.manage.vo.labelfieldcontent;
import lombok.Data;
import java.util.List;
@Data
public class LabelField {
private List<GroupingValue> groupingValues;
}

View File

@ -232,6 +232,44 @@
</where>
</select>
<select id="groupingValue" resultType="com.xinelu.manage.vo.labelfieldcontent.GroupingValue">
select
lfi.id labelFieldInfoId,
lfi.field_name,
lfi.field_code,
lfi.field_type,
lfi.field_sort,
lfi.field_remark,
lfi.task_partition_dict_id,
lfi.task_partition_dict_name,
lfi.task_type_id,
lfi.task_type_name,
lfc.id labelFieldContentId,
lfc.field_id,
lfc.field_name,
lfc.field_code,
lfc.field_value,
lfc.portrait_sn,
lfc.portrait_status,
lfc.content_sort
from label_field_info lfi
LEFT JOIN label_field_content lfc ON lfi.id =lfc.field_id
where 1=1
<if test="taskPartitionDictId != null and taskPartitionDictId != 0">
and lfi.task_partition_dict_id = #{taskPartitionDictId}
</if>
<if test="taskPartitionDictId == null">
and lfi.task_partition_dict_id is null
</if>
<if test="patientId != null">
and lfc.patient_id = #{patientId}
</if>
<if test="portraitStatus != null">
and lfc.portrait_status = #{portraitStatus}
</if>
Order by lfc.content_sort
</select>
<select id="selectByPatientId" resultType="com.xinelu.manage.vo.labelfieldcontent.LabelFieldInfoContentVo">
select
content.field_code,

View File

@ -216,10 +216,9 @@
<select id="taskPartitionDictIdList" resultType="com.xinelu.manage.domain.labelfieldinfo.LabelFieldInfo">
select
field_code,
task_partition_dict_id,
task_partition_dict_name
from label_field_info
id taskPartitionDictId,
task_partition_name taskPartitionDictName
from task_partition_dict
<where>
<if test="taskPartitionDictName != null and taskPartitionDictName != ''">
task_partition_dict_name like concat('%', #{taskPartitionDictName}, '%')

View File

@ -73,4 +73,53 @@
where patient_id = #{patientId}
</select>
<select id="selectPatientAllInfoListViewByPatientId"
resultType="com.xinelu.manage.domain.patientinfo.PatientAllInfoView">
select paiv.patient_id,
paiv.patient_name,
paiv.patient_phone,
paiv.family_member_phone,
paiv.birth_date,
paiv.card_no,
paiv.sex,
paiv.address,
paiv.patient_type,
paiv.patient_visit_record_id,
paiv.visit_method,
paiv.visit_date,
paiv.hospital_agency_name,
paiv.campus_agency_name,
paiv.department_name,
paiv.ward_name,
paiv.attending_physician_name,
paiv.main_diagnosis,
paiv.admission_time,
paiv.discharge_time,
paiv.hospitalization_days,
paiv.in_hospital_info,
paiv.out_hospital_info,
paiv.visit_serial_number,
paiv.in_hospital_number,
paiv.responsible_nurse,
paiv.surgical_name,
paiv.surgical_record,
paiv.sign_patient_record_id,
paiv.payment_status,
paiv.health_manage_name,
paiv.service_status,
paiv.sign_status,
paiv.billing_doctor_name,
paiv.sign_time,
paiv.package_name,
paiv.package_payment_status,
paiv.package_price,
paiv.service_start_time,
paiv.service_end_time,
paiv.package_term,
paiv.package_term_unit
from patient_all_info_view paiv
left join patient_info pi ON pi.id = paiv.patient_id
where paiv.patient_id = #{patientId}
Order BY pi.update_time
</select>
</mapper>

View File

@ -856,27 +856,27 @@
</select>
<select id="selectRouteNodeByRouteId" resultType="com.xinelu.manage.vo.specialdiseasenode.PatientSpecialDiseaseNodeVo">
select sdr.id routeId,
sdr.route_name routeName,
sdn.id as routeNodeId,
sdn.route_node_name routeNodeName,
sdn.route_node_day routeNodeDay,
sdn.task_type,
sdn.task_subdivision,
sdn.route_check_status routeCheckStatus,
ttd.id taskTypeId,
ttd.task_type_name taskTypeName,
ttd.task_type_code taskTypeCode,
tpd.id taskPartitionDictId,
tpd.task_partition_name taskPartitionDictName,
tpd.task_partition_code taskPartitionCode
from special_disease_route sdr
left join special_disease_node sdn ON sdn.route_id = sdr.id
left join task_type_dict ttd ON ttd.task_type_code = sdn.task_type
left join task_partition_dict tpd on tpd.task_partition_code = sdn.task_subdivision
where sdr.id = #{specialDiseaseRouteId} and sdn.node_content like '%data-w-e-type%'
and sdn.route_check_status = 'AGREE'
</select>
select sdr.id routeId,
sdr.route_name routeName,
sdn.id as routeNodeId,
sdn.route_node_name routeNodeName,
sdn.route_node_day routeNodeDay,
sdn.task_type,
sdn.task_subdivision,
sdn.route_check_status routeCheckStatus,
ttd.id taskTypeId,
ttd.task_type_name taskTypeName,
ttd.task_type_code taskTypeCode,
tpd.id taskPartitionDictId,
tpd.task_partition_name taskPartitionDictName,
tpd.task_partition_code taskPartitionCode
from special_disease_route sdr
left join special_disease_node sdn ON sdn.route_id = sdr.id
left join task_type_dict ttd ON ttd.task_type_code = sdn.task_type
left join task_partition_dict tpd on tpd.task_partition_code = sdn.task_subdivision
where sdr.id = #{specialDiseaseRouteId}
and sdn.route_check_status = 'AGREE'
</select>
<select id="selectByRouteId" resultType="com.xinelu.manage.vo.specialdiseasenode.SpecialDiseaseNodeAuditVo">
select