|
@@ -359,20 +359,38 @@ public class NursingManagementService {
|
|
|
* @param: psInfoVO
|
|
|
* @return: java.util.List<thyyxxk.webserver.entity.medicaladvice.medicamanage.PsInfoVO>
|
|
|
**/
|
|
|
- public List<PsInfoVO> queryPsInfo(PsInfoVO psInfoVO){
|
|
|
+ public List<PsInfoVO> queryPsInfo(PsInfoVO psInfoVO){
|
|
|
String psOperCondition = "";
|
|
|
- if(psInfoVO.getConfirmFlag() == 0){
|
|
|
+ if(psInfoVO.getConfirmFlag() == null || psInfoVO.getConfirmFlag() == 0){
|
|
|
psOperCondition = "isnull(ps_oper,'') ='' ";
|
|
|
}else {
|
|
|
psOperCondition = " isnull(ps_oper,'') <>''";
|
|
|
}
|
|
|
- List<PsInfoVO> psInfoVOS = dao.listPsInfo(psInfoVO.getStartBedNo(), psInfoVO.getEndBedNo(),psInfoVO.getCurWard(), psOperCondition);
|
|
|
+
|
|
|
+ List<PsInfoVO> psInfoVOS;
|
|
|
+
|
|
|
+ // 如果有住院号和入院次数,优先按这些条件查询
|
|
|
+ if (StrUtil.isNotBlank(psInfoVO.getInpatientNo()) && psInfoVO.getAdmissTimes() != null) {
|
|
|
+ log.info("queryPsInfo - 按住院号和入院次数查询: 住院号={}, 入院次数={}", psInfoVO.getInpatientNo(), psInfoVO.getAdmissTimes());
|
|
|
+ psInfoVOS = dao.listPsInfoByInpatientNo(psInfoVO.getInpatientNo(), psInfoVO.getAdmissTimes(), psOperCondition);
|
|
|
+ log.info("queryPsInfo - 按住院号查询结果数量: {}", psInfoVOS != null ? psInfoVOS.size() : 0);
|
|
|
+ } else {
|
|
|
+ // 如果没有住院号,使用原有的查询方式
|
|
|
+ psInfoVOS = dao.listPsInfo(
|
|
|
+ psInfoVO.getStartBedNo() != null ? psInfoVO.getStartBedNo() : "",
|
|
|
+ psInfoVO.getEndBedNo() != null ? psInfoVO.getEndBedNo() : "",
|
|
|
+ psInfoVO.getCurWard() != null ? psInfoVO.getCurWard() : "",
|
|
|
+ psOperCondition
|
|
|
+ );
|
|
|
+ }
|
|
|
if(CollUtil.isNotEmpty(psInfoVOS)){
|
|
|
psInfoVOS.forEach(item->{
|
|
|
if(StrUtil.isBlank(item.getPsOper())){
|
|
|
UserInfo userInfo = userCache.getUserInfoByToken();
|
|
|
- item.setPsOper(userInfo.getCode());
|
|
|
- item.setPsOperName(userInfo.getName());
|
|
|
+ if(userInfo != null){
|
|
|
+ item.setPsOper(userInfo.getCode());
|
|
|
+ item.setPsOperName(userInfo.getName());
|
|
|
+ }
|
|
|
}
|
|
|
});
|
|
|
}
|
|
@@ -937,11 +955,32 @@ public class NursingManagementService {
|
|
|
yzTemperatureVO.setAdmissTimes(query.getAdmissTimes());
|
|
|
List<YzTemperatureGm> yzTemperatureGms = dao.listYzTemperatureGm(yzTemperatureVO);
|
|
|
CommonUtil.BeanTrim(yzTemperatureGms);
|
|
|
- GraphicsDataVO graphicsDataVO =createGraphicsDataVO(yzTemperatures,yzTemperatureSums,yzTemperatureGms,query);
|
|
|
+
|
|
|
+ // 获取皮试数据
|
|
|
+ PsInfoVO psInfoVO = new PsInfoVO();
|
|
|
+ psInfoVO.setInpatientNo(query.getInpatientNo());
|
|
|
+ psInfoVO.setAdmissTimes(query.getAdmissTimes());
|
|
|
+ // 设置必要的查询参数,避免空指针异常
|
|
|
+ psInfoVO.setStartBedNo("");
|
|
|
+ psInfoVO.setEndBedNo("");
|
|
|
+ psInfoVO.setCurWard("");
|
|
|
+ psInfoVO.setConfirmFlag(1); // 设置为已确认状态
|
|
|
+ List<PsInfoVO> psInfoList = queryPsInfo(psInfoVO);
|
|
|
+ log.info("getChartData - 获取到皮试数据: 住院号={}, 数据条数={}", query.getInpatientNo(), psInfoList != null ? psInfoList.size() : 0);
|
|
|
+
|
|
|
+ // 如果没有获取到数据,尝试不设置confirmFlag
|
|
|
+ if (CollUtil.isEmpty(psInfoList)) {
|
|
|
+ log.info("getChartData - 第一次查询无数据,尝试不设置confirmFlag");
|
|
|
+ psInfoVO.setConfirmFlag(null);
|
|
|
+ psInfoList = queryPsInfo(psInfoVO);
|
|
|
+ log.info("getChartData - 第二次查询结果: 数据条数={}", psInfoList != null ? psInfoList.size() : 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ GraphicsDataVO graphicsDataVO =createGraphicsDataVO(yzTemperatures,yzTemperatureSums,yzTemperatureGms,psInfoList,query);
|
|
|
return ResultVoUtil.success(graphicsDataVO);
|
|
|
}
|
|
|
|
|
|
- public GraphicsDataVO createGraphicsDataVO(List<YzTemperature> yzTemperatures, List<YzTemperatureSum> yzTemperatureSums, List<YzTemperatureGm> yzTemperatureGms, GraphicsParam query) {
|
|
|
+ public GraphicsDataVO createGraphicsDataVO(List<YzTemperature> yzTemperatures, List<YzTemperatureSum> yzTemperatureSums, List<YzTemperatureGm> yzTemperatureGms, List<PsInfoVO> psInfoList, GraphicsParam query) {
|
|
|
GraphicsDataVO graphicsDataVO = new GraphicsDataVO();
|
|
|
List<String> operDays = getOperDays(query);
|
|
|
graphicsDataVO.setOperaDays(operDays);
|
|
@@ -955,12 +994,12 @@ public class NursingManagementService {
|
|
|
//呼吸和疼痛
|
|
|
setBreatheAndPain(query,types,yzTemperatures,dateList,timeList);
|
|
|
//其他
|
|
|
- setOtherTypes(query,types,yzTemperatureGms,yzTemperatureSums,dateList);
|
|
|
+ setOtherTypes(query,types,yzTemperatureGms,yzTemperatureSums,psInfoList,dateList);
|
|
|
graphicsDataVO.setTypes(types);
|
|
|
return graphicsDataVO;
|
|
|
}
|
|
|
|
|
|
- private void setOtherTypes(GraphicsParam query,List<ScdBaseInfo> types, List<YzTemperatureGm> yzTemperatureGms, List<YzTemperatureSum> yzTemperatureSums,List<String> dateList) {
|
|
|
+ private void setOtherTypes(GraphicsParam query,List<ScdBaseInfo> types, List<YzTemperatureGm> yzTemperatureGms, List<YzTemperatureSum> yzTemperatureSums, List<PsInfoVO> psInfoList, List<String> dateList) {
|
|
|
//过敏药物 010 过敏药物
|
|
|
setGmYw(types, yzTemperatureGms, dateList);
|
|
|
//005 大便
|
|
@@ -975,6 +1014,9 @@ public class NursingManagementService {
|
|
|
for (int i = 0; i < typeCodes.length; i++) {
|
|
|
setPublicOtherTypes(query,types,yzTemperatureSums,dateList,typeCodes[i],fieldNames[i]);
|
|
|
}
|
|
|
+
|
|
|
+ // 皮试结果 031,032,033,034
|
|
|
+ setPsInfoTypes(types, psInfoList, dateList);
|
|
|
}
|
|
|
|
|
|
private void setPublicOtherTypes(GraphicsParam query,List<ScdBaseInfo> types, List<YzTemperatureSum> yzTemperatureSums, List<String> dateList, String typeCode, String fieldName) {
|
|
@@ -1032,6 +1074,78 @@ public class NursingManagementService {
|
|
|
return o -> itemDate.equals(DateUtil.formatDate(o.getRecDate()));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 设置皮试结果数据
|
|
|
+ * @param types 类型列表
|
|
|
+ * @param psInfoList 皮试信息列表
|
|
|
+ * @param dateList 日期列表
|
|
|
+ */
|
|
|
+ private void setPsInfoTypes(List<ScdBaseInfo> types, List<PsInfoVO> psInfoList, List<String> dateList) {
|
|
|
+ log.info("setPsInfoTypes - 开始处理皮试数据,psInfoList大小: {}", psInfoList != null ? psInfoList.size() : 0);
|
|
|
+
|
|
|
+ if (CollUtil.isEmpty(psInfoList)) {
|
|
|
+ log.info("setPsInfoTypes - 没有皮试数据,创建空的皮试结果行");
|
|
|
+ // 如果没有皮试数据,创建空的皮试结果行
|
|
|
+ for (String itemDate : dateList) {
|
|
|
+ for (int i = 0; i < 4; i++) {
|
|
|
+ ScdBaseInfo scdBaseInfo = new ScdBaseInfo();
|
|
|
+ scdBaseInfo.setDate(itemDate);
|
|
|
+ String typeCode = "031";
|
|
|
+ if (i == 1) typeCode = "032";
|
|
|
+ else if (i == 2) typeCode = "033";
|
|
|
+ else if (i == 3) typeCode = "034";
|
|
|
+ scdBaseInfo.setTypeCode(typeCode);
|
|
|
+ scdBaseInfo.setTypeValue("");
|
|
|
+ types.add(scdBaseInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按日期分组皮试数据,过滤掉psResultTime为null的数据
|
|
|
+ Map<String, List<PsInfoVO>> psInfoByDate = psInfoList.stream()
|
|
|
+ .filter(ps -> ps.getPsResultTime() != null)
|
|
|
+ .collect(Collectors.groupingBy(ps -> DateUtil.formatDate(ps.getPsResultTime())));
|
|
|
+
|
|
|
+ log.info("setPsInfoTypes - 按日期分组后的皮试数据: {}", psInfoByDate.keySet());
|
|
|
+ log.info("setPsInfoTypes - 原始皮试数据详情:");
|
|
|
+ for (PsInfoVO ps : psInfoList) {
|
|
|
+ log.info("setPsInfoTypes - 皮试数据: 住院号={}, 姓名={}, 结果时间={}, 状态={}",
|
|
|
+ ps.getInpatientNo(), ps.getName(), ps.getPsResultTime(), ps.getPsStatus());
|
|
|
+ }
|
|
|
+
|
|
|
+ for (String itemDate : dateList) {
|
|
|
+ List<PsInfoVO> dayPsInfo = psInfoByDate.get(itemDate);
|
|
|
+
|
|
|
+ // 最多显示4个皮试结果
|
|
|
+ for (int i = 0; i < 4; i++) {
|
|
|
+ ScdBaseInfo scdBaseInfo = new ScdBaseInfo();
|
|
|
+ scdBaseInfo.setDate(itemDate);
|
|
|
+
|
|
|
+ String typeCode = "031";
|
|
|
+ if (i == 1) typeCode = "032";
|
|
|
+ else if (i == 2) typeCode = "033";
|
|
|
+ else if (i == 3) typeCode = "034";
|
|
|
+
|
|
|
+ scdBaseInfo.setTypeCode(typeCode);
|
|
|
+
|
|
|
+ if (dayPsInfo != null && i < dayPsInfo.size()) {
|
|
|
+ PsInfoVO psInfo = dayPsInfo.get(i);
|
|
|
+ String psResult = "";
|
|
|
+ if (StrUtil.isNotBlank(psInfo.getPsStatus())) {
|
|
|
+ psResult = "1".equals(psInfo.getPsStatus()) ? "阳性" : "阴性";
|
|
|
+ }
|
|
|
+ scdBaseInfo.setTypeValue(psResult);
|
|
|
+ log.info("setPsInfoTypes - 设置皮试结果: 日期={}, 类型码={}, 结果={}", itemDate, typeCode, psResult);
|
|
|
+ } else {
|
|
|
+ scdBaseInfo.setTypeValue("");
|
|
|
+ }
|
|
|
+
|
|
|
+ types.add(scdBaseInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void setGmYw(List<ScdBaseInfo> types, List<YzTemperatureGm> yzTemperatureGms, List<String> dateList) {
|
|
|
List<String> gmyws = new ArrayList<>();
|
|
|
if(CollUtil.isNotEmpty(yzTemperatureGms)){
|