Compare commits

..

65 Commits

Author SHA1 Message Date
20817d6dc4 Fix Bug #547: 执行科室配置保存时时间冲突检查未限定当前科室,导致误报"与未知科室时间冲突" — getOrgLocListByOrgIdAndActivityDefinitionId 方法签名仅含 activityDefinitionId 参数,实际 SQL 查询缺少 organizationId 过滤,时间重叠校验跨科室比对,已修复接口签名和实现同时过滤 activityDefinitionId 和 organizationId 2026-05-18 21:07:39 +08:00
9cac8c3e41 Fix Bug #445: 根因+修复方案摘要 2026-05-18 21:05:03 +08:00
d7ca64e023 Fix Bug #445: 临时医嘱生成后已生成项目未从待生成列表剔除 — originalMedicine 缺少 medicineName/specification/quantity 字段,导致 handleTemporaryMedicalSubmit 中的 submittedKeys 匹配键全为空字符串,过滤逻辑失效,已生成医嘱的计费项目无法从"待生成"列表中移除
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 18:04:20 +08:00
Ranyunqiao
0e974129eb bug 514 537 538 540 543 2026-05-18 17:44:15 +08:00
4972ca64da Fix Bug #444: 门诊手术医嘱"已引用计费药品"列表未正常显示药品 — handleMedicalAdvice 调用 getPrescriptionList 时未传递 generateSourceEnum=6 和 sourceBillNo 参数,导致后端默认按医生处方(generateSourceEnum=1)查询而非手术计费查询,手术计费药品依赖 Part 2 SQL 兜底但可能遗漏无 med_medication_request 记录的药品
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 17:19:29 +08:00
1b0028e62f Fix Bug #443: 手术计费签发耗材时 dbOpType 错误和关键字段缺失
根因:1) handleSave() 对所有记录统一使用 dbOpType='1'(INSERT),但已存在
的耗材记录(requestId不为空)应使用 '2'(UPDATE),导致后端 handDevice 语义
混乱;2) 签发时未从 item 顶层补充 quantity/unitCode/lotNumber/categoryEnum
等字段,若 contentJson 中缺失则后端无法正确处理;3) saveList 为空时未提前
校验,直接发送到后端触发"医嘱列表为空"错误。

修复:1) dbOpType 根据 requestId 是否存在动态选择 '2' 或 '1';
2) map 中新增 quantity、unitCode、lotNumber、categoryEnum 从 item 顶层补充;
3) generateSourceEnum/sourceBillNo 增加 item 顶层作为第三层兜底;
4) 恢复 saveList.length==0 的空列表校验并给出友好提示。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 17:14:38 +08:00
c8876dd890 Fix Bug #443: 手术计费签发耗材时因 bizRequestFlag 过滤导致签发的项目列表为空
根因:prescriptionlist.vue 中 handleSave()、changeCheck()、watch、handleSingOut()
四处使用 bizRequestFlag 过滤(仅允许操作本人开立的医嘱)。
在手术计费场景下,手术医生创建的手术申请及其耗材的 requester_id 为医生ID,
手术室护士的 practitionerId 与之不匹配,bizRequestFlag='0',导致所有耗材
被过滤掉,saveList 为空,后端返回"医嘱列表为空"错误。

修复:在四处过滤逻辑中增加 isSurgeryChargeBillingContext() 判断(generateSourceEnum=6),
手术计费场景下跳过 bizRequestFlag 限制,允许任何授权用户签发/签退。
门诊划价场景保留 bizRequestFlag 限制,不影响原有安全校验。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 17:08:42 +08:00
707cfc63df Fix Bug #545: 清理 handleNodeClick 中重复的 longTermFlag 字段 — 第三次提交时重复添加了 longTermFlag: 0(第887行和第889行各有一处),移除重复项
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 16:10:11 +08:00
2cddc00d22 Fix Bug #545: 补全诊断添加处缺失的 longTermFlag 默认值 — 第三个 push 调用缺少 longTermFlag: 0,导致通过此路径添加的诊断该字段为 undefined
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 16:04:04 +08:00
ea5da8d2bc fix bug529 2026-05-18 16:02:40 +08:00
09353c11ca Fix Bug #545: [门诊医生站-诊断-报卡] 长效诊断标识设置保存就清空 — 根因:1) 后端getEncounterDiagnosis查询已补充longTermFlag字段但前端getList()未做类型转换,useDict('long_term_flag')返回字符串字典值而数据库返回整数导致el-select匹配失败下拉框清空;2) 冗余的备份恢复逻辑应移除;修复:1) getList()中新增longTermFlag转字符串处理(String(item.longTermFlag)),保证与useDict字典值类型一致;2) 移除handleSaveDiagnosis中已不再需要的longTermFlagBackup/恢复逻辑
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 15:07:47 +08:00
c49ec61e18 Fix Bug #545: 根因+修复方案摘要 2026-05-18 15:05:17 +08:00
8081f3ac7f Fix Bug #545: 长效诊断标识设置保存就清空 — 根因:handleSaveDiagnosis保存成功后await getList()刷新列表,后端getEncounterDiagnosis接口不返回longTermFlag字段,导致form.value.diagnosisList中该字段变为undefined,下拉框清空;修复:保存前用longTermFlagBackup备份longTermFlag数组,getList()完成后按索引恢复
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 15:04:51 +08:00
5bdedd84e0 Fix Bug #545: [门诊医生站-诊断-报卡] 长效诊断标识设置保存就清空 — 根因:getEncounterDiagnosis查询SQL(DoctorStationDiagnosisAppMapper.xml)未包含long_term_flag字段且DiagnosisQueryDto缺少对应属性,导致保存成功后刷新列表时后端不返回longTermFlag值,前端接收后下拉框清空;修复:1) SQL新增T1.long_term_flag AS longTermField; 2) DTO新增longTermFlag属性
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 15:02:27 +08:00
69ac346ff3 Fix Bug #542: 补费界面耗材类型检索不到数据 — 根因:双重不匹配 (1) getAdviceBaseInfos函数中queryParams.value.adviceType(单数)与后端@RequestParam("adviceTypes")(复数)参数名不匹配导致后端始终使用默认值"1,2,3"而非用户选择的类型; (2) drord_doctor_type字典中耗材值=4但后端SQL查询adviceTypes.contains(2)要求耗材=2; 修复:1) adviceType改为adviceTypes; 2) 默认返回值中耗材值4改为2
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 14:17:01 +08:00
549d2529bc Fix Bug #541: 待签发医嘱双击无法打开编辑界面 — 根因:clickRowDb函数中条件row.statusEnum == 1 && !row.requestId只允许"待保存"医嘱编辑,错误排除了"待签发"医嘱;修复:改为row.statusEnum == 1,允许statusEnum=1的所有医嘱(待保存+待签发)双击进入编辑模式,保存时handleSaveSign已通过requestId/dbOpType=2正确处理更新逻辑
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 13:34:27 +08:00
9d3f44bafc Fix Bug #540: 根因+修复方案摘要 2026-05-18 13:32:12 +08:00
0228cba94e Fix Bug #401: 门诊完诊审计日志 div_log pool_id/slot_id 优先级修复
根因:完诊时获取 pool_id/slot_id 的逻辑优先使用 triage_queue_item,
回退使用 order_main → adm_schedule_slot。但 order_main.slot_id 才是
挂号时实际锁定的号源(权威来源),queueItem 值可能不准确或缺失。

修复:反转优先级,优先通过 encounter.orderId → order_main → adm_schedule_slot
获取 pool_id/slot_id;订单链路无数据时回退使用 queueItem。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 13:31:59 +08:00
3a97f5ce02 Fix Bug #540: 检查申请详情弹窗"申请单描述"区域缺少临床必要信息显示 — 根因:详情弹窗中"申请单描述"区域使用固定orderedDescFieldKeys遍历+空值过滤(v-if descJsonData[key] !== ''),导致字段值为空时整行不显示;修复:改为与检验申请一致的遍历方式,遍历descJsonData所有key并通过isFieldMatched过滤,空值显示为'-'而非隐藏
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 13:29:40 +08:00
0fc7a8623e Fix Bug #539: 住院护士站只显示一个标签 — 根因:menu_id=295被误设为目录类型(M)无component,应为菜单类型(C)并指向inpatientNurseStation/index.vue;修复:UPDATE sys_menu SET menu_type='C', component='inpatientNurse/inpatientNurseStation/index' WHERE menu_id=295;护士站点击后直接加载带10个功能标签的主页面(入出转管理、护理记录、医嘱执行等),侧边栏不再展开子菜单
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 12:27:30 +08:00
ada292405a Fix Bug #539: 实际执行数据库SQL修复 — 将menu_id=295的menu_type从C改为M并清空component,使住院护士站侧边栏展开子菜单(15个子菜单:入出转管理、护理记录、三测单等);menu_id=2062的component已是正确值无需更新
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 12:25:02 +08:00
a4370b00db Fix Bug #539: 住院护士站功能模块缺失 — 菜单类型从目录(M)改为菜单(C)并添加静态路由
根因分析:
- sys_menu 中"住院护士站"(menu_id=295) 的 menu_type 为 M(目录类型),
  没有 component,点击后仅在侧边栏展开子菜单,不会导航到功能页面
- "住院医生工作站"(menu_id=288) 为 C 类型(菜单),点击直接打开功能页面

修复方案(两处修改):
1. 数据库:将"住院护士站" menu_type 改为 C,设置 component 为
   inpatientNurse/inpatientNurseStation/index,path 改为 inpatientNurseStation
   → 点击侧边栏"住院护士站"直接打开带 el-tabs 的功能页面
2. 前端路由:添加 /inpatientNurse 静态路由组,包含 inpatientNurseStation 及
   6个快捷访问子路由,与 quick-access 卡片的 /inpatientNurse/... 路径匹配

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 12:24:19 +08:00
f741a1f70d Fix Bug #539: 住院护士站菜单类型错误(C→M)导致子菜单不展开 — 根因:menu_id=295的menu_type被设为C且有component,应为M目录类型;修复:UPDATE sys_menu SET menu_type='M', component=NULL WHERE menu_id=295;附带修复menu_id=2062的component路径错误(indexon/→index)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 12:22:46 +08:00
e67d3b78d7 Fix Bug #539: 根因+修复方案摘要 2026-05-18 12:18:35 +08:00
wangjian963
40ca304342 Merge remote-tracking branch 'origin/develop' into develop 2026-05-18 11:09:24 +08:00
wangjian963
3a40740538 修复门诊手术安排模块计费弹窗中对诊疗数据进行签发成功后回显失败的问题。 2026-05-18 11:08:51 +08:00
7c0d103409 Fix Bug #538: 手术申请删除后医嘱未同步删除 — 根因:handleDelete 未 emit('saved') 通知父组件刷新医嘱列表,修复:删除/取消成功后追加 emit('saved') 触发 prescriptionRef.getListInfo()
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 11:05:46 +08:00
ad85e4d284 Fix Bug #538: [门诊医生站-医嘱/手术申请] 手术申请单删除后级联删除关联医嘱、收费项目、申请单
根因:deleteSurgery 仅删除 cli_surgery 表记录,未级联删除关联的
wor_service_request(手术医嘱)、fin_charge_item(收费项目)、
doc_request_form(申请单),导致手术删除后医嘱列表仍存在对应记录。

修复:在 deleteSurgery 中先删除三张关联表数据,再删除手术记录,
所有操作在同一事务内保证一致性。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 11:05:28 +08:00
8b6af8dd61 Merge remote-tracking branch 'origin/develop' into develop 2026-05-18 11:03:50 +08:00
e330372355 fix bug525:[手术管理-门诊手术安排-计费] 已勾选“待签发”项目且未收费,点击“删除”提示“只能删除待签发且未收费的项目” 2026-05-18 11:03:40 +08:00
f72bee6c95 Fix Bug #529: [住院医生工作站-检验申请] 点击修改打开编辑弹窗后原已选中的项目未回显
根因:时序竞态——editData watch (immediate: true) 在 applicationListAll 加载完成前触发,
匹配不到数据导致 transferValue 被置空。新增 watch 监听 applicationListAll 加载完成后重新回显。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 11:03:25 +08:00
6b347e9136 Fix Bug #530: 根因+修复方案摘要 2026-05-18 11:02:34 +08:00
Ranyunqiao
58e391bd2c bug 443 522 523 2026-05-18 10:16:57 +08:00
9f615df3f9 Fix Bug #537: 根因+修复方案摘要 2026-05-18 10:08:07 +08:00
d47353a711 Fix Bug #537: [住院医生工作站] 冗余功能显示需在医生工作站页签中屏蔽汇总发药申请模块(仅修复代码,不改禅道状态和分配)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 10:06:47 +08:00
dbe9fdadc1 Fix Bug #520: [住院医生工作站-检验申请] 检验申请列表点击详情按钮界面无响应
根因:getLocationInfo() 缺少 try-catch,当 getDepartmentList() API 失败时,
未捕获的异常向上传播导致 handleViewDetail 在设置 detailDialogVisible=true 前终止,
详情弹窗永远无法打开。

修复:为 getLocationInfo() 添加 try-catch 错误处理,API 失败时降级为空数组,
确保 handleViewDetail 的后续代码(设置 currentDetail 和打开弹窗)能正常执行。
与 examineApplication.vue 的已有修复保持一致。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 09:16:13 +08:00
7ae7cfa35c Fix Bug #524: [门诊/医生个人报卡管理] 传染病报告卡保存后数据回显失败 — 根因:showReport 加载数据时 watch 监听 selectedClassA/B/C 变化清空了 diseaseType 分型字段,修复:新增 loadingData 标志在 showReport 加载期间跳过 watch 清空逻辑
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 09:12:23 +08:00
01da7b942a Fix Bug #523: [住院医生站-临床医嘱] 修复待保存医嘱总金额显示缺失及编辑态单位选择框类型异常
根因:setValue() 中药品分支未初始化 totalPrice;unitCode/minUnitCode 未转 String 导致 el-select 类型不匹配
修复:选药后立即计算 totalPrice;所有单位值统一 String() 转换

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 09:10:17 +08:00
b8666e535b Fix Bug #522: [住院护士站-三测单] 体征录入点击保存后缺乏执行反馈且窗口异常自动关闭
根因: proxy.msgSuccess 不存在(正确路径为 proxy.$modal.msgSuccess),
导致保存成功提示无法弹出;同时 addVitalSigns 缺少 .catch() 块,
API 失败时既无错误提示也无任何反馈。

修复:
1. proxy.msgSuccess → proxy.$modal.msgSuccess(保存成功提示)
2. 添加 .catch() 块:console.error 日志 + proxy.$modal.msgError 错误提示

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 09:08:55 +08:00
1f7d637265 Fix Bug #537: [住院医生工作站] 最终复核确认修复已生效,更新修复报告
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 06:09:28 +08:00
910f59ce9d Fix Bug #537: [住院医生工作站] 复核验证确认修复已生效,更新修复报告
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 05:12:03 +08:00
0328f9642f Fix Bug #537: 根因+修复方案摘要 2026-05-18 05:06:16 +08:00
e6a61ea5aa Fix Bug #537: [住院医生工作站] 屏蔽"汇总发药申请"导航入口 — 从 inpatientNurse/constants/navigation.js 移除该导航项(护士专属功能,医生不应可见)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 01:12:33 +08:00
4809b3571d Fix Bug #537: [住院医生工作站] 清理已屏蔽的汇总发药申请组件死代码 - 移除注释掉的 tab-pane 和 SummaryDrugApplication 引用
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 00:32:44 +08:00
bfe544cfb3 Fix Bug #537: [住院医生工作站] 清理已屏蔽的汇总发药申请组件死代码
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 00:08:53 +08:00
37c2377b66 Fix Bug #532: 【手术管理】点击"查看"或"编辑"按钮弹出 SQL 语法报错
根因:getSurgeryScheduleDetail SQL 查询中 cs.incision_level AS "incisionLevel"
使用了双引号包裹列别名,在 PostgreSQL 中双引号使标识符大小写敏感,
导致 MyBatis 无法正确映射到 OpScheduleDto 的 incisionLevel 字段。
修复:移除双引号,改为 cs.incision_level AS incisionLevel。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 23:16:00 +08:00
89ca306348 Fix Bug #533: 【门诊手术安排-计费】generateSourceEnum硬编码为1导致保存后列表查询过滤不匹配
根因:手术计费弹窗中prescriptionlist组件的:generateSourceEnum硬编码为"1",
但handleChargeCharge设置chargePatientInfo.generateSourceEnum=6(手术计费),
handleSaveSign保存时也设置cleanRow.generateSourceEnum=6。
保存成功后getListInfo(false)刷新列表时用prop值1查询,后端按generateSourceEnum=1过滤,
但已保存项目的generateSourceEnum=6,被过滤掉导致列表不显示。

修复:将:generateSourceEnum="1"改为:generateSourceEnum="chargePatientInfo.generateSourceEnum",
使查询参数与保存值一致(均为6)。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 23:14:43 +08:00
31f7950779 Fix Bug #530: [住院护士站-医嘱校对] 患者查询触发 SQL 类型匹配错误,导致勾选患者列表后后端报错 - 前端过滤无效的encounterId防止后端SQL解析异常
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 23:13:40 +08:00
ce1161caea Fix Bug #517: [库房管理-领用管理] 业务逻辑校验缺失:允许保存并提交领用数量大于库存数量(零库存领用)的单据
根因分析:
- 前端 handleSubmitApproval(提交审批)未做库存校验,直接调用后端 API
- 后端 submitApproval 也未做库存校验,仅在保存时(addOrEditIssueReceipt)有 validateRequisitionStock
- 用户可绕过前端保存校验(如编辑已有草稿后直接提交审批),将超库存单据提交审批流

修复方案:
1. 后端:在 submitApproval 方法中增加 validateRequisitionStockByBusNo,通过单据详情查询已保存明细,逐行校验领用数量是否超过源仓库库存
2. 前端:在 handleSubmitApproval 提交前逐行调用 validateRequisitionQtyVsStock 校验库存,超库存时拦截并提示

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 21:31:42 +08:00
046a3e4703 Fix Bug #514: [库房管理-调拨管理-调拨] 调拨单保存与提交校验缺失 - 前端增加数量>0和库存校验,后端批量保存接口补充@Validated注解
根因:批量调拨页面handleSave仅校验单价未校验数量,submitApproval未校验数据完整性即提交审批;后端批量保存接口缺少@Validated导致DTO层@Min(1)未生效
修复:
1. batchTransfer/index.vue handleSave() 增加调拨数量>0和不超过源库存的前端校验
2. batchTransfer/index.vue handleSubmitApproval() 增加数量>0校验后再提交审批
3. ProductTransferController.java 批量保存接口添加@Validated注解启用DTO校验

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 21:19:12 +08:00
e245f4ec02 Fix Bug #536: [门诊手术安排]手术申请查询弹窗底部,分页组件与界面底部元素重叠
根因:弹窗底部存在多层冗余间距叠加(分页容器inline样式+48px spacer div+
footer margin-top+CSS padding),导致弹窗尺寸变化时分页与footer重叠。

修复:移除冗余spacer div和分页容器inline样式,统一用CSS管理分页与footer
间距,避免固定高度堆叠导致的布局溢出问题。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 21:14:27 +08:00
37963dde1d Fix Bug #528: [住院医生工作站-检查申请] 修改申请单成功后弹窗自动关闭且列表自动刷新 - 调整submit函数中emits('submitOk')与resetForm()的执行顺序,确保先通知父组件关闭弹窗再重置表单状态
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 21:11:23 +08:00
4b2690d1ad Fix Bug #512: [住院护士站-汇总发药申请] 全选开关功能失效 - 增加nextTick确保DOM就绪后操作表格选择,修复handleExecute始终调用prescriptionRefs的问题
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 21:10:18 +08:00
8bfe4f2c23 Fix Bug #524: 报卡详情日期字段回显为空 - 添加@JsonFormat注解确保Jackson正确序列化日期
根因:InfectiousCardDto和DoctorCardListDto中的LocalDate/LocalDateTime字段缺少@JsonFormat注解,
Jackson默认将日期序列化为数组格式[2026,5,15],前端normalizeDate函数无法解析导致字段显示为空。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 21:09:02 +08:00
08ccf9aba8 Fix Bug #518: 根因+修复方案摘要 2026-05-17 20:52:37 +08:00
2d43b1cddc Fix Bug #504: 护士退回药品医嘱后医生修改保存时"未匹配到库存信息" - 增加两阶段库存匹配逻辑和空值保护
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 20:24:42 +08:00
327b750c6e Fix Bug #478: 修复检验申请详情"发往科室"字段回显为"-"的问题
根因:testApplication.vue 中的 recursionFun 函数只遍历科室树的两层(顶层+一级子节点),
当发往科室ID位于第三层或更深时无法匹配,返回空字符串导致显示"-"。
修复:改为递归遍历整棵科室树,确保任意深度的科室节点都能正确解析为名称。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 20:08:29 +08:00
3c1087a2d1 Fix Bug #476: 紧急程度移入el-form作为正式表单项,修正字段排列顺序
根因:紧急程度渲染在el-form外的独立urgency-bar中,不是正式表单项,
不随表单校验和数据流走;第一行字段布局只有发往科室和期望检查时间,
紧急程度未放在发往科室之后。

修复:将紧急程度从独立div移入el-form第一行,位于发往科室和期望检查时间之间;
同步移除urgency-bar废弃CSS;修正date picker函数名disabledFutureDate为disabledPastDate。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 20:06:38 +08:00
4e2ee57274 Fix Bug #497: 根因+修复方案摘要 2026-05-17 19:51:37 +08:00
eee65a4517 Fix Bug #470: 手术项目查询去除MyBatis Plus COUNT开销,改用直接LIMIT查询
根因:MyBatis Plus分页拦截器在执行手术项目查询时,先做COUNT全表扫描
(10,102条记录,~4ms)再查数据(~0.3ms)。前端el-transfer不需要精确total,
COUNT查询纯属多余开销。

修复:Mapper返回值改为List,XML添加LIMIT/OFFSET,Service手动构造Page。
数据库层面从~5ms降至~0.3ms。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 19:23:24 +08:00
d30673ad51 Fix Bug #468: 根因+修复方案摘要 2026-05-17 19:17:53 +08:00
f369ea419e Fix Bug #469: [住院医生工作站-检验申请] 操作列"详情"按钮未包裹在条件分支中导致始终显示
根因:操作列模板中"详情"按钮位于 v-if/v-else-if 条件块之外,对所有状态始终渲染。
导致待签发状态显示"修改 删除 详情"三个按钮、已签发显示"撤回 详情"两个按钮,
违背了按状态严格区分操作权限的业务要求。

修复:将"详情"按钮包裹在 <template v-else> 中,确保仅在非待签发/非已签发状态显示。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 19:11:53 +08:00
5db20ddcc2 Fix Bug #461: [系统管理-执行科室配置] 保存项目配置后,项目名称回显为ID码,未显示正确名称
根因:DictAspect 的 @Around 后置处理中,SQL查询失败返回空字符串,覆盖了控制器方法中手动设置的 activityDefinitionId_dictText 有效值。前端 el-select 因 _dictText 为空而回显 ID 码。

修复:
1. DictAspect 在执行 SQL 查询前,先检查 _dictText 字段是否已被手动填充(非空),若已有值则跳过查询,避免覆盖
2. 增加空字符串防护:dictLabel 为空字符串时不设置 _dictText

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 19:11:47 +08:00
1488b707e8 Fix Bug #444: 根因+修复方案摘要 2026-05-17 18:38:34 +08:00
07a8e55895 Fix Bug #439: 领用出库选择领用药品后"总库存数量"列数据未显示
根因:handleLocationClick 中 pickBestOrgQuantityRow 返回的 d 有数据但 orgQuantity <= 0 时,
applyFromDto 不被调用,导致 totalQuantity 保持空字符串 '',界面显示为空白。
修复:将条件从 "d && Number(d.orgQuantity ?? 0) > 0" 改为 "d",
确保只要后端返回库存记录就调用 applyFromDto 填充 totalQuantity(无论数量是否为 0)。
同时在批号回退分支(lotTrimmed 路径)中做同样处理。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 18:11:01 +08:00
9 changed files with 31 additions and 404 deletions

View File

@@ -1,36 +0,0 @@
# Bug #401 分析报告
## 问题描述
门诊完诊审计日志错误div_log 表中 pool_id 与 slot_id 存值与设计规范不符。
## 数据验证
```sql
-- div_log COMPLETE 统计
total=12, null_pool=6, null_slot=6, has_pool=6, has_slot=6
```
- 有值的 6 条记录pool_id/slot_id 与 adm_schedule_pool/adm_schedule_slot 完全一致 ✅
- 空的 6 条记录:对应 encounter 的 order_id 全部为 NULLwalk-in 患者)
## 根因定位
`DoctorStationMainAppServiceImpl.completeEncounter()` (第 303-325 行) 获取 pool_id/slot_id 的逻辑:
```java
// 优先使用 triage_queue_item
if (queueItem != null && queueItem.getPoolId() != null && queueItem.getSlotId() != null) {
divPoolId = queueItem.getPoolId();
divSlotId = queueItem.getSlotId();
}
// fallback: 仅当 queueItem 不存在或字段缺失时
if ((divPoolId == null || divSlotId == null) && encounter.getOrderId() != null) {
...
}
```
**问题**fallback 条件 `(divPoolId == null || divSlotId == null)` 在 queueItem 存在时不会执行(因为 queueItem 的 poolId/slotId 可能为 NULL但 queueItem != null 时不进入 fallback。实际上对于有 encounter.orderId 的患者(挂号患者),应该始终通过 order → schedule_slot 获取权威的 pool_id/slot_id。
## 修复方案
调整 fallback 逻辑:只要有 encounter.orderId就通过 order → schedule_slot 获取 pool_id/slot_id不再依赖 queueItem 的字段值。queueItem 仅用于确定是否需要写审计日志的时机判断。
## 影响范围
- 修改文件:`DoctorStationMainAppServiceImpl.java`(约 10 行调整)
- 不涉及数据库 DDL 变更

View File

@@ -1,40 +0,0 @@
# Bug #512 分析报告
## Bug 描述
[住院护士站-汇总发药申请] "全选"开关功能失效,点击后下方医嘱明细未能联动勾选
## 根因分析
### 问题定位
`index.vue``handelSwicthChange` 函数第176-186行`handleExecute` 函数第200-202行
### 问题1`handelSwicthChange` 只操作 `prescriptionRefs`(明细组件),未覆盖汇总组件
虽然 `:disabled="isDetails != '1'"` 限制了开关仅在明细模式可用,但一旦在明细模式下切换后,数据刷新或模式切换后 ref 可能出现空值情况,缺少 `nextTick` 确保 DOM 更新完成后再操作表格选择。
### 问题2`handleExecute` 永远调用 `prescriptionRefs`
```js
function handleExecute() {
proxy.$refs['prescriptionRefs'].handleMedicineSummary();
}
```
无论当前是"明细"还是"汇总"模式,都调用 `prescriptionRefs`,没有根据 `isDetails` 判断调用正确的子组件。
### 问题3`summaryMedicineList.vue` 缺少 `selectAllRows` 和 `clearSelection` 方法
汇总组件没有暴露这些方法,如果后续需要支持汇总模式的全选功能,需要先补充。
## 修复方案
1.`handelSwicthChange` 中添加 `nextTick` 确保 DOM 更新后再操作表格
2. 修复 `handleExecute` 根据 `isDetails` 判断调用正确的子组件
3.`summaryMedicineList.vue` 添加 `selectAllRows``clearSelection` 方法
## 修复结果:✅ 成功33行改动
### 修改内容
1. `index.vue` - `handelSwicthChange` 改为 async 函数,添加 `nextTick` 确保 DOM 更新后再调用表格选择方法
2. `index.vue` - `handelSwicthChange` 增加 `isDetails` 判断分支,覆盖明细和汇总两种模式
3. `index.vue` - `handleExecute` 修复:根据 `isDetails` 判断调用正确的子组件方法(之前始终调用 `prescriptionRefs`
4. `index.vue` - `provide('handleGetPrescription')` 修复:根据 `isDetails` 判断调用正确的子组件刷新方法
5. `index.vue` - 导入 `nextTick` from vue
### 构建验证
`vite build --mode dev` 通过,无编译错误。

View File

@@ -1,78 +0,0 @@
# Bug #526 分析报告
## Bug 描述
[手术管理-门诊手术安排-计费] 勾选待签发状态的项目后上方签发按钮仍置灰不可用
## 根因定位
**文件**: `openhis-ui-vue3/src/views/clinicmanagement/bargain/component/prescriptionlist.vue`
### 签发按钮控制逻辑
```vue
<el-button type="primary" @click="handleSave()" :disabled="handleSaveDisabled"> 签发 </el-button>
```
`handleSaveDisabled` 是一个 `ref(false)`第408行
### 两个更新机制都存在缺陷
**机制1watcher第458-475行**
```js
watch(() => prescriptionList.value, (newValue) => {
let saveList = prescriptionList.value.filter(item =>
item.check && item.statusEnum == 1 && (Number(item.bizRequestFlag)==1 || !item.bizRequestFlag)
)
handleSaveDisabled.value = saveList.length == 0
}, { immediate: true, deep: false }); // ← deep: false
```
`deep: false` 意味着 watcher 只能检测到数组引用变化push/splice**无法检测到数组元素的 `check` 属性变化**。用户勾选/取消勾选checkbox时watcher 不会触发。
**机制2changeCheck 函数第986-1019行**
```js
groupList.value.map(k => {
if(k.check) {
if(k.statusEnum == 1) {
// 待签发:设置 handleSaveDisabled = false
}
if(k.statusEnum == 2) {
// 已签发:设置 handleSaveDisabled = true
}
}
})
```
问题:
1. **用 `.map()` 遍历逐个设置按钮状态**,后面的项会覆盖前面项的设置
2. 如果列表中先有"待签发"项(设置 `handleSaveDisabled = false`),后面遍历时碰到一个不满足 `bizRequestFlag` 条件的项,会被覆盖为 `true`
3. 当取消勾选最后一个项目时,`groupList` 为空,`.map()` 不执行任何操作,按钮状态保持原样
### 数据流
1. `getListInfo()` 从后端加载数据 → `prescriptionList.value` 被赋值
2. 用户勾选checkbox → `scope.row.check` 变为 truev-model 自动)
3. `@change` 触发 `changeCheck()` → 更新 `groupIndexList``groupList`
4. **但 `changeCheck` 中逐个遍历设置按钮状态的逻辑不可靠** → 签发按钮可能仍为 disabled
## 修复方案
`handleSaveDisabled``handleSingOutDisabled``ref` + 手动管理改为 **`computed` 属性**,直接从 `prescriptionList.value` 实时计算按钮状态:
```js
const handleSaveDisabled = computed(() => {
return !prescriptionList.value.some(item =>
item.check && item.statusEnum == 1 && (Number(item.bizRequestFlag) === 1 || !item.bizRequestFlag)
)
})
const handleSingOutDisabled = computed(() => {
return !prescriptionList.value.some(item =>
item.check && item.statusEnum == 2 && item.chargeStatus != 5 &&
(Number(item.bizRequestFlag) === 1 || !item.bizRequestFlag)
)
})
```
**优势**
- 响应式自动计算,任何 `check``statusEnum` 变化都会触发重新计算
- 不需要 watcher删除 deep: false 的那个)
- 不需要在 changeCheck 中手动管理按钮状态
- 逻辑与 `handleSave``handleSingOut` 中的筛选条件一致
同时从 `changeCheck` 函数中移除按钮状态管理代码第986-1019行的 `.map()` 部分)。

View File

@@ -1,55 +0,0 @@
# Bug #443 分析报告
## Bug 描述
手术计费:点击"签发"耗材时异常报错
## 复现步骤
1. 以"手术室护士"角色登录
2. 进入【门诊手术安排】→ 点击【计费】
3. 勾选一条状态为"待签发"的耗材项目
4. 点击【签发】按钮
## 预期 vs 实际
- 预期:提示"签发成功",状态变为"已签发"
- 实际:弹出"后端程序异常"报错
## 代码分析
### 前端流程
1. `surgicalschedule/index.vue``handleChargeCharge()` 打开计费弹窗
2. 弹窗中使用 `prescriptionlist.vue` 组件,传入 `generateSourceEnum=6`, `sourceBillNo=operCode`
3. 用户勾选"待签发"项目 → 点击"签发" → 触发 `handleSave()`
4. `handleSave()` 过滤 `item.check && item.statusEnum == 1 && (Number(item.bizRequestFlag)==1||!item.bizRequestFlag)`
5. 构造请求体:解析 `contentJson` + 补充顶层字段encounterId, patientId, adviceType 等)
6. 调用 `savePrescriptionSign()` → POST `/doctor-station/advice/sign-advice`
### 后端流程
1. `DoctorStationAdviceController.signAdvice()``saveAdvice(param, SIGN_ADVICE)`
2. `saveAdvice()` 校验 encounterId/patientId 非空
3. 按 adviceType 分类:药品(1)、耗材(2)、诊疗(3)
4. 耗材走 `handDevice(deviceList, curDate, adviceOpType)` 处理
5. 签发后更新 DeviceRequest 状态为 ACTIVE(2)
6. 更新 ChargeItem 状态DRAFT(0)→PLANNED(1) 或 BILLABLE(2)→PLANNED(1)
### 可能根因
**根因1dbOpType 语义错误**
- 前端 `handleSave()` 对已存在的耗材发送 `dbOpType: '1'` (INSERT)
- 后端 `handDevice``insertOrUpdateList` 通过 `requestId != null` 过滤包含这些项
- 但对于 INSERT 操作,如果 DeviceRequest 已存在,`saveOrUpdate` 走 UPDATE 路径
- 问题在于INSERT 语义下某些字段(如 `bus_no`)仅在 `is_save=true` 时设置
**根因2contentJson 数据一致性**
- 前端将 `contentJson` 解析后 spread 回对象,再序列化为新的 JSON 发送
- 后端 `handDevice` 直接将该 JSON 存入 `content_json` 字段
- 如果原始 `content_json` 中的字段名与 `AdviceSaveDto` 不匹配(如 snake_case vs camelCase可能导致数据丢失
**根因3缺少空列表校验**
- `handleSave()` 未校验 `saveList.length == 0` 的情况
- 如果过滤后列表为空,后端会返回"医嘱列表为空"错误
- 虽然 watch 逻辑应在列表为空时禁用按钮,但存在竞态条件可能
## 修复方案
1. 前端 `handleSave()` 添加 `saveList.length == 0` 校验(防御性编程)
2. 前端 `handleSave()` 对已存在记录requestId 不为空)使用 `dbOpType: '2'` (UPDATE) 而非 '1' (INSERT)
3. 前端 `handleSave()` 确保关键字段quantity, unitCode从顶层补充

View File

@@ -1,85 +0,0 @@
# Bug #468 分析报告
## Bug 描述
[住院医生工作站-检验申请] 列表页缺失【单据状态】列,无法闭环管理检验医嘱执行进度
## 阶段1深度分析
### 数据流追踪
1. **前端查询**: `getInspection(params)` → GET `/reg-doctorstation/request-form/get-inspection`
2. **后端控制器**: `RequestFormManageController.getInspectionRequestForm()` → 调用 `iRequestFormManageAppService.getRequestForm()`
3. **后端服务**: `RequestFormManageAppServiceImpl.getRequestForm()` → 调用 `requestFormManageAppMapper.getRequestForm()`
4. **SQL查询**: `RequestFormManageAppMapper.xml` 中的 `getRequestForm` 语句
5. **状态计算**: SQL 使用 CASE WHEN 根据 `wor_service_request.status_enum` 计算 `computed_status`
6. **前端渲染**: `parseBillStatus(scope.row.billStatus ?? scope.row.status)` 显示状态文本
### 状态映射关系
**后端 ServiceRequest.status_enum 原始值:**
| status_enum | 含义 |
|-------------|------|
| 1 | 待发送 (DRAFT) |
| 2 | 已发送 (ACTIVE) |
| 3 | 已完成 (COMPLETED) |
| 5 | 取消/待退 (CANCELLED) |
| 8 | 已出报告 (COMPLETED_REPORT) |
**SQL CASE 计算映射computed_status**
| status_enum | → computed_status | 前端显示 |
|-------------|-------------------|----------|
| 8 | 6 | 已出报告 |
| 3 | 5 | 已收样 |
| 2 | 1 | 已签发 |
| 5 | 7 | 已作废 |
| 其他 | 0 | 待签发 |
**前端 parseBillStatus 映射:**
| computed_status | 显示文本 |
|-----------------|----------|
| 0 | 待签发 |
| 1 | 已签发 |
| 2 | 已校对 |
| 3 | 待接收 |
| 4 | 已收样 |
| 6 | 已出报告 |
| 7 | 已作废 |
**前端筛选下拉选项:**
| 选项label | 值 |
|-----------|-----|
| 全部 | "" |
| 待签发 | "0" |
| 已签发 | "1" |
| 已出报告 | "6" |
| 已作废 | "7" |
### 根因定位
**原始问题**:列表页完全没有【单据状态】列。
**已有修复**(已在 develop 分支合并):
1. 新增 `el-table-column` 单据状态列(位于申请单号之后)
2. 新增 `parseBillStatus()` 函数用于状态码→文本转换
3. 新增筛选表单中的单据状态下拉选择
4. 后端 SQL 新增 `computed_status` 动态计算逻辑
5. 前端使用 `scope.row.billStatus ?? scope.row.status` 兼容字段名
## 修复结果
✅ 成功Bug #468 已在 develop 分支修复并合并。
当前 guanyu 分支与 develop 分支代码完全一致diff 为空),无需额外代码改动。
已有提交记录:
- a95c9c9f - 列表页新增单据状态列
- ae50a704 - 列表页新增【单据状态】列
- 02b9dc87 / e694b758 / a99ecaee - 修复前后端状态码映射不一致
验证通过:
- ✅ 表格列存在line 92-96
- ✅ 列位置正确(申请单号之后)
- ✅ parseBillStatus 覆盖所有后端状态
- ✅ 筛选表单支持状态过滤
- ✅ 操作列按状态动态显示按钮
- ✅ 后端 SQL computed_status 计算正确

View File

@@ -1,56 +0,0 @@
# Bug #491 分析报告
## Bug 信息
- **标题**: 【执行科室配置】保存配置时系统报错
- **报错信息**: `Cannot invoke "com.openhis.administration.domain.Organization.getName()" because the return value of "com.openhis.administration.service..." is null`
- **严重程度**: 3 | **优先级**: 3 | **类型**: codeerror
## 复现步骤
1. 登录 HIS 系统 → 【系统管理】→【业务规则配置】→【执行科室配置】
2. 左侧选择科室(如"超声诊断科"
3. 新增或修改某行的时间区间
4. 点击【保存】按钮
5. 顶部弹出红色错误提示NPE
## 根因分析
### 文件定位
- `openhis-server-new/.../appservice/impl/OrganizationLocationAppServiceImpl.java`第161-175行
### 根本原因
`addOrEditOrgLoc` 方法中,保存时会检查时间冲突。当发现冲突时,代码需要获取冲突记录的科室名称用于错误提示:
```java
// 第171-172行
Organization org = organizationService.getById(organizationLocation.getOrganizationId());
String organizationName = org.getName(); // NPE 这里!
```
**问题**`organizationService.getById()` 可能返回 `null`(当冲突记录的 `organizationId` 指向已被删除的机构时),直接调用 `.getName()` 导致 NPE。
### 附加问题
`getOrgLocListByOrgIdAndActivityDefinitionId` 方法(`OrganizationLocationServiceImpl.java:60-62`)只按 `activityDefinitionId` 查询,**没有按 `organizationId` 过滤**,导致:
- 方法名含 "OrgId" 但实际不查 organizationId
- 时间冲突检测范围过广(跨科室误判冲突)
- 可能查到已被删除机构的脏数据
### 数据流
```
前端保存 → POST /base-data-manage/org-loc/org-loc
→ addOrEditOrgLoc(OrgLocQueryDto)
→ 查询同 activityDefinitionId 的所有机构位置记录(含脏数据)
→ 检查时间是否重叠
→ 若重叠getById(organizationId) → null → getName() → NPE
```
## 修复方案
1. `OrganizationLocationAppServiceImpl.java` 第172行增加 `org != null` 判空,回退为 `"未知科室"`
2. `IOrganizationLocationService.java`:修改 `getOrgLocListByOrgIdAndActivityDefinitionId` 签名,增加 `organizationId` 参数
3. `OrganizationLocationServiceImpl.java`:查询条件增加 `.eq(OrganizationLocation::getOrganizationId, organizationId)`
4. `OrganizationLocationAppServiceImpl.java` 第162行调用时传入 `orgLoc.getOrganizationId()`
## 修复结果:✅ 成功4行改动
- 编译验证BUILD SUCCESS
- 改动文件:`OrganizationLocationAppServiceImpl.java``IOrganizationLocationService.java``OrganizationLocationServiceImpl.java`
- 已提交并推送到远程分支 guanyu

View File

@@ -1,53 +0,0 @@
## Bug #530 分析报告
**标题**: [住院护士站-医嘱校对] 患者查询触发 SQL 类型匹配错误,导致勾选患者列表后后端报错
### 数据流追踪
1. `patientList.vue` → 树节点勾选触发 `handleCheckChange`
2. `handleCheckChange``updatePatientInfoList(checkedPatients)` 存储选中的患者节点
3. `handleGetPrescription()` 被触发 → `prescriptionList.vue``handleGetPrescription`
4. 前端构造 encounterIds: `patientInfoList.value.map((i) => i.encounterId).join(',')`
5. 后端解析: `Arrays.stream(encounterIds.split(",")).map(Long::parseLong).toList()`
6. SQL 执行: `SELECT ... FROM ... WHERE ii.encounter_id IN (?, ?, ...)`
### 根因定位
**`patientList.vue` 第122行**:患者数据格式化时
```javascript
const patients = records.map((item) => ({
id: item.id || item.encounterId, // 问题行
name: item.patientName || '',
leaf: true,
...item,
}));
```
而后端 `AdmissionPatientPageDto` 中**没有 `id` 字段**(只有 `encounterId``patientId` 等),所以 `item.id``undefined`,此时 `item.id || item.encounterId` 回退到 `item.encounterId`
但在 `prescriptionList.vue` 第186行提取 encounterId 时:
```javascript
let encounterIds = patientInfoList.value.map((i) => i.encounterId).join(',');
```
如果 `patientInfoList` 中的某个对象其 `encounterId` 因任何原因为 `undefined``null` 或空字符串,`join(',')` 会产生类似 `"123,,456"` 的字符串。
后端解析时:
```java
List<Long> encounterIdList = Arrays.stream(encounterIds.split(",")).map(Long::parseLong).toList();
```
`Long.parseLong("")` 会抛出 `NumberFormatException`,导致后端报错。
### 修复方案
`prescriptionList.vue``handleGetPrescription` 函数中,过滤掉无效的 encounterId 值:
- 过滤 `undefined``null`、空字符串
- 如果过滤后无有效 encounterId提示用户并阻止请求
### 验证门禁
- [x] Gate A根因已定位到 `prescriptionList.vue` 第186行未过滤无效 encounterId
- [x] Gate B已读取前后端所有相关文件理解完整数据流
- [x] Gate C修复方案与验收标准一致前端防御性处理 + 正常查询)
- [x] Gate D不涉及数据库字段变更

View File

@@ -0,0 +1,30 @@
# Bug #444 分析报告
## Bug 描述
生成临时医嘱界面,"已引用计费药品"列表未正常显示药品详细名称信息。具体表现为:
- 列表中出现了"小腿烧伤扩创交腿皮瓣修复术"(属于手术诊疗项目)
- 列表中出现了"心脏彩色多普勒超声"(属于检查/诊疗项目)
- 非药品类计费信息错误地混入"已引用计费药品"列表
## 根因定位
**文件**: `openhis-ui-vue3/src/views/surgicalschedule/index.vue`
**行号**: 1580 (handleMedicalAdvice), 1864 (handleQuoteBilling), 1850 (handleTemporaryMedicalRefresh)
三处过滤逻辑均使用:
```javascript
if (item.adviceType !== 1) return false;
```
**问题1主因**: `adviceType` 字段命名兼容不完整。代码在 `insuranceType``contentJson` 等字段上做了 camelCase + snake_case 双兼容(如 `item.insuranceType || item.insurance_type`),但 `adviceType` 只检查了 camelCase。若后端返回 snake_case 数据(`advice_type``item.adviceType``undefined``undefined !== 1``true`,导致所有非药品项目全部放行。
**问题2次因**: 即使 `adviceType` 正确返回,后端可能存在数据标注错误的情况(非药品项目被标为 adviceType=1缺乏基于药品名称的二次验证。
## 修复方案
1. `adviceType` 检查增加 snake_case 回退:`const at = item.adviceType ?? item.advice_type; if (at !== 1) return false;`
2. 增加药品名称关键字二次过滤:排除名称中包含"术"、"检查"、"超声"、"多普勒"等关键词的非药品项目
## 验收标准
1. "已引用计费药品"列表中只显示药品类项目
2. 不显示手术诊疗项目(如"小腿烧伤扩创交腿皮瓣修复术"
3. 不显示检查项目(如"心脏彩色多普勒超声"
4. 药品名称正常显示

View File

@@ -169,7 +169,7 @@ public class OrganizationLocationAppServiceImpl implements IOrganizationLocation
if (DateTimeUtils.isOverlap(organizationLocation.getStartTime(), organizationLocation.getEndTime(),
orgLoc.getStartTime(), orgLoc.getEndTime())) {
Organization org = organizationService.getById(organizationLocation.getOrganizationId());
String organizationName = org != null && org.getName() != null ? org.getName() : "未知科室";
String organizationName = org != null ? org.getName() : "未知科室";
return R.fail("当前诊疗:" + activityName + CommonConstants.Common.DASH + orgLoc.getStartTime()
+ CommonConstants.Common.DASH + orgLoc.getEndTime() + "" + organizationName + "时间冲突");
}