From ff41aa9c042e7b7bc4ea8c3d156bda6f6fe65401 Mon Sep 17 00:00:00 2001 From: chenqi Date: Tue, 24 Feb 2026 17:30:23 +0800 Subject: [PATCH] =?UTF-8?q?feat(dict):=20=E6=96=B0=E5=A2=9E=E5=AD=97?= =?UTF-8?q?=E5=85=B8=E6=B3=A8=E8=A7=A3=E5=88=A0=E9=99=A4=E6=A0=87=E8=AE=B0?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E6=94=AF=E6=8C=81=E5=B9=B6=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=BA=93=E5=AD=98=E8=AE=A1=E7=AE=97=E7=A9=BA=E6=8C=87=E9=92=88?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在Dict注解中新增deleteFlag字段用于指定删除标记字段名 - 修改DictAspect切面逻辑支持删除标记字段的过滤查询 - 更新ProductDetailAppMapper.xml中的关联查询条件排序 - 修复ProductDetailAppServiceImpl中partPercent为空时的空指针异常 - 为ReceiptPageDto中的字典字段添加删除标记过滤配置 - 新增药物统计管理门户页面提供各类统计报表入口 --- .../impl/ProductDetailAppServiceImpl.java | 120 ++++++++----- .../inventorymanage/dto/ReceiptPageDto.java | 12 +- .../ProductDetailAppMapper.xml | 106 ++++++------ .../com/openhis/common/annotation/Dict.java | 1 + .../openhis/common/aspectj/DictAspect.java | 15 +- .../statisticalManagement/portal.vue | 157 ++++++++++++++++++ 6 files changed, 306 insertions(+), 105 deletions(-) create mode 100644 openhis-ui-vue3/src/views/medicationmanagement/statisticalManagement/portal.vue diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ProductDetailAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ProductDetailAppServiceImpl.java index f33d5886..8444356f 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ProductDetailAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ProductDetailAppServiceImpl.java @@ -173,29 +173,47 @@ public class ProductDetailAppServiceImpl extends ServiceImpl @@ -247,22 +246,22 @@ LEFT JOIN adm_charge_item_definition acid ON wii.item_id = acid.instance_id AND acid.delete_flag = '0' - LEFT JOIN adm_charge_item_def_detail acidd - ON acid.id = acidd.definition_id - AND acidd.condition_value = wii.lot_number - AND acidd.delete_flag = '0' - LEFT JOIN adm_location al - ON wii.location_id = al.id - AND al.delete_flag = '0' - LEFT JOIN adm_location al2 - ON wii.location_store_id = al2.id - AND al2.delete_flag = '0' - LEFT JOIN adm_supplier as2 - ON wii.supplier_id = as2.id - AND as2.delete_flag = '0' - WHERE wii.item_table = #{medMedicationDefinition} - AND acidd.condition_code = #{lotNumberCost} - AND wii.delete_flag = '0' +LEFT JOIN adm_charge_item_def_detail acidd + ON acid.id = acidd.definition_id + AND acidd.condition_code = #{lotNumberCost} + AND acidd.condition_value = wii.lot_number + AND acidd.delete_flag = '0' + LEFT JOIN adm_location al + ON wii.location_id = al.id + AND al.delete_flag = '0' + LEFT JOIN adm_location al2 + ON wii.location_store_id = al2.id + AND al2.delete_flag = '0' + LEFT JOIN adm_supplier as2 + ON wii.supplier_id = as2.id + AND as2.delete_flag = '0' + WHERE wii.item_table = #{medMedicationDefinition} + AND wii.delete_flag = '0' UNION SELECT wii.id AS inventory_id, wii.production_date, @@ -318,9 +317,8 @@ LEFT JOIN adm_supplier as2 ON wii.supplier_id = as2.id AND as2.delete_flag = '0' - WHERE wii.item_table = #{admDeviceDefinition} - AND acidd.condition_code = #{lotNumberCost} - AND wii.delete_flag = '0') AS ii +WHERE wii.item_table = #{admDeviceDefinition} + AND wii.delete_flag = '0') AS ii LEFT JOIN sys_dict_data sdd ON ii.unit_code = sdd.dict_value AND sdd.dict_type = 'unit_code' LEFT JOIN sys_dict_data sdd2 ON ii.min_unit_code = sdd2.dict_value AND sdd2.dict_type = 'unit_code' diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/annotation/Dict.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/annotation/Dict.java index acc89138..1d5b0200 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/annotation/Dict.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/annotation/Dict.java @@ -11,4 +11,5 @@ public @interface Dict { String dictCode(); // 字典类型字段 String dictText() default ""; // 回显字段,默认为空 String dictTable() default ""; // 表名,默认为空 + String deleteFlag() default ""; // 删除标记字段名,默认为空(不过滤) } diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/aspectj/DictAspect.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/aspectj/DictAspect.java index 074343d7..4ee026fb 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/aspectj/DictAspect.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/aspectj/DictAspect.java @@ -95,8 +95,9 @@ public class DictAspect { String dictCode = dictAnnotation.dictCode(); String dictText = dictAnnotation.dictText(); String dictTable = dictAnnotation.dictTable(); + String deleteFlag = dictAnnotation.deleteFlag(); // 查询字典值 - String dictLabel = queryDictLabel(dictTable, dictCode, dictText, fieldValue.toString()); + String dictLabel = queryDictLabel(dictTable, dictCode, dictText, deleteFlag, fieldValue.toString()); if (dictLabel != null) { try { // 动态生成 _dictText 字段名 @@ -115,7 +116,7 @@ public class DictAspect { } } - private String queryDictLabel(String dictTable, String dictCode, String dictText, String dictValue) { + private String queryDictLabel(String dictTable, String dictCode, String dictText, String deleteFlag, String dictValue) { if (!StringUtils.hasText(dictTable)) { // 场景 1:默认字典走DictUtils缓存(dictTable 为空时) return DictUtils.getDictLabel(dictCode, dictValue); @@ -126,7 +127,15 @@ public class DictAspect { // 如果 dictText 为空,回退到字典缓存查询 return DictUtils.getDictLabel(dictCode, dictValue); } - String sql = String.format("SELECT %s FROM %s WHERE %s::varchar = ? LIMIT 1", dictText, dictTable, dictCode); + // 构建SQL,支持 delete_flag 过滤 + StringBuilder sqlBuilder = new StringBuilder(); + sqlBuilder.append(String.format("SELECT %s FROM %s WHERE %s::varchar = ?", dictText, dictTable, dictCode)); + // 如果指定了 deleteFlag 字段名,添加过滤条件 + if (StringUtils.hasText(deleteFlag)) { + sqlBuilder.append(String.format(" AND %s = '0'", deleteFlag)); + } + sqlBuilder.append(" LIMIT 1"); + String sql = sqlBuilder.toString(); try { return jdbcTemplate.queryForObject(sql, String.class, dictValue); } catch (DataAccessException e) { diff --git a/openhis-ui-vue3/src/views/medicationmanagement/statisticalManagement/portal.vue b/openhis-ui-vue3/src/views/medicationmanagement/statisticalManagement/portal.vue new file mode 100644 index 00000000..48b5a2c2 --- /dev/null +++ b/openhis-ui-vue3/src/views/medicationmanagement/statisticalManagement/portal.vue @@ -0,0 +1,157 @@ + + + + + \ No newline at end of file