refactor(config): 重构应用配置中的Jackson序列化设置
- 将Jackson2ObjectMapperBuilderCustomizer替换为直接配置ObjectMapper实例 - 移除未使用的Logger导入和日志变量声明 - 统一日期时间序列化配置方式,禁用时间戳格式 - 更新反序列化上下文参数命名以保持一致性 - 简化泛型类型声明,使用钻石操作符 fix(patient): 修复患者管理中的数据库查询语法错误 - 移除PatientManageMapper.xml中多余的逗号导致的SQL语法问题 - 确保字段列表格式正确以避免数据库解析错误 fix(rationaldrug): 修正合理用药模块API端点路径 - 移除API路径中的healthlink-his前缀,统一使用/api/v1基础路径 - 保持所有处方审核相关接口的一致性 feat(patient): 在患者添加对话框中增加联系人信息字段 - 添加联系人姓名、关系和电话号码输入表单 - 为新字段提供相应的验证规则和占位符提示 - 保持与现有监护人信息字段的界面布局一致
This commit is contained in:
@@ -1,20 +1,19 @@
|
|||||||
package com.core.framework.config;
|
package com.core.framework.config;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonParser;
|
import com.fasterxml.jackson.core.JsonParser;
|
||||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||||
import com.fasterxml.jackson.databind.JsonDeserializer;
|
import com.fasterxml.jackson.databind.JsonDeserializer;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||||
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
|
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
|
||||||
import org.mybatis.spring.annotation.MapperScan;
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
import org.springframework.boot.jackson2.autoconfigure.Jackson2ObjectMapperBuilderCustomizer;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.EnableAspectJAutoProxy;
|
import org.springframework.context.annotation.EnableAspectJAutoProxy;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
@@ -23,15 +22,14 @@ import java.util.TimeZone;
|
|||||||
@EnableAspectJAutoProxy(exposeProxy = true)
|
@EnableAspectJAutoProxy(exposeProxy = true)
|
||||||
@MapperScan({"com.core.**.mapper", "com.healthlink.his.**.mapper"})
|
@MapperScan({"com.core.**.mapper", "com.healthlink.his.**.mapper"})
|
||||||
public class ApplicationConfig {
|
public class ApplicationConfig {
|
||||||
private static final Logger log = LoggerFactory.getLogger(ApplicationConfig.class);
|
|
||||||
|
|
||||||
private static final JsonDeserializer<LocalDateTime> LOCAL_DATE_TIME_DESERIALIZER = new JsonDeserializer<LocalDateTime>() {
|
private static final JsonDeserializer<LocalDateTime> LOCAL_DATE_TIME_DESERIALIZER = new JsonDeserializer<>() {
|
||||||
private static final DateTimeFormatter ISO_FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
|
private static final DateTimeFormatter ISO_FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
|
||||||
private static final DateTimeFormatter SIMPLE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
private static final DateTimeFormatter SIMPLE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
private static final DateTimeFormatter SLASH_FORMATTER = DateTimeFormatter.ofPattern("yyyy/M/d HH:mm:ss");
|
private static final DateTimeFormatter SLASH_FORMATTER = DateTimeFormatter.ofPattern("yyyy/M/d HH:mm:ss");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
|
public LocalDateTime deserialize(JsonParser p, DeserializationContext context) throws IOException {
|
||||||
String text = p.getText();
|
String text = p.getText();
|
||||||
if (text == null || text.isEmpty()) return null;
|
if (text == null || text.isEmpty()) return null;
|
||||||
String cleaned = text.replaceAll("[Zz]$", "").replaceAll("[+-]\\d{2}:?\\d{2}$", "");
|
String cleaned = text.replaceAll("[Zz]$", "").replaceAll("[+-]\\d{2}:?\\d{2}$", "");
|
||||||
@@ -42,14 +40,17 @@ public class ApplicationConfig {
|
|||||||
};
|
};
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
|
public ObjectMapper objectMapper() {
|
||||||
return builder -> {
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
builder.timeZone(TimeZone.getDefault());
|
mapper.setTimeZone(TimeZone.getDefault());
|
||||||
builder.simpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
|
||||||
JavaTimeModule javaTimeModule = new JavaTimeModule();
|
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
||||||
javaTimeModule.addDeserializer(LocalDateTime.class, LOCAL_DATE_TIME_DESERIALIZER);
|
|
||||||
builder.modules(javaTimeModule);
|
JavaTimeModule javaTimeModule = new JavaTimeModule();
|
||||||
builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
javaTimeModule.addDeserializer(LocalDateTime.class, LOCAL_DATE_TIME_DESERIALIZER);
|
||||||
};
|
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
||||||
|
mapper.registerModule(javaTimeModule);
|
||||||
|
|
||||||
|
return mapper;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -26,7 +26,7 @@ public class FlexibleDateDeserializer extends JsonDeserializer<Date> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
|
public Date deserialize(JsonParser p, DeserializationContext context) throws IOException {
|
||||||
String dateStr = p.getValueAsString();
|
String dateStr = p.getValueAsString();
|
||||||
if (dateStr == null || dateStr.isEmpty()) {
|
if (dateStr == null || dateStr.isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
pt.guardian_address,
|
pt.guardian_address,
|
||||||
pt.patient_derived,
|
pt.patient_derived,
|
||||||
pt.education_level,
|
pt.education_level,
|
||||||
pt.company_address,
|
pt.company_address
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
(
|
(
|
||||||
@@ -103,7 +103,7 @@
|
|||||||
p.guardian_address,
|
p.guardian_address,
|
||||||
p.patient_derived,
|
p.patient_derived,
|
||||||
p.education_level,
|
p.education_level,
|
||||||
p.company_address,
|
p.company_address
|
||||||
FROM adm_patient p
|
FROM adm_patient p
|
||||||
where p.delete_flag = '0'
|
where p.delete_flag = '0'
|
||||||
) AS pt
|
) AS pt
|
||||||
|
|||||||
@@ -2,51 +2,51 @@ import request from '@/utils/request'
|
|||||||
|
|
||||||
// ==================== 处方审核 ====================
|
// ==================== 处方审核 ====================
|
||||||
export function auditPrescription(data) {
|
export function auditPrescription(data) {
|
||||||
return request({ url: '/healthlink-his/api/v1/rational-drug/audit', method: 'post', data })
|
return request({ url: '/api/v1/rational-drug/audit', method: 'post', data })
|
||||||
}
|
}
|
||||||
|
|
||||||
export function batchAudit(prescriptionIds) {
|
export function batchAudit(prescriptionIds) {
|
||||||
return request({ url: '/healthlink-his/api/v1/rational-drug/batch-audit', method: 'post', data: prescriptionIds })
|
return request({ url: '/api/v1/rational-drug/batch-audit', method: 'post', data: prescriptionIds })
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getAuditStatistics() {
|
export function getAuditStatistics() {
|
||||||
return request({ url: '/healthlink-his/api/v1/rational-drug/statistics', method: 'get' })
|
return request({ url: '/api/v1/rational-drug/statistics', method: 'get' })
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getAuditTrend(startDate) {
|
export function getAuditTrend(startDate) {
|
||||||
return request({ url: '/healthlink-his/api/v1/rational-drug/trend', method: 'get', params: { startDate } })
|
return request({ url: '/api/v1/rational-drug/trend', method: 'get', params: { startDate } })
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getAuditLog(encounterId) {
|
export function getAuditLog(encounterId) {
|
||||||
return request({ url: `/healthlink-his/api/v1/rational-drug/audit-log/${encounterId}`, method: 'get' })
|
return request({ url: `/api/v1/rational-drug/audit-log/${encounterId}`, method: 'get' })
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== 配伍禁忌 ====================
|
// ==================== 配伍禁忌 ====================
|
||||||
export function checkInteraction(drugCodes) {
|
export function checkInteraction(drugCodes) {
|
||||||
return request({ url: '/healthlink-his/api/v1/rational-drug/check-interaction', method: 'post', data: drugCodes })
|
return request({ url: '/api/v1/rational-drug/check-interaction', method: 'post', data: drugCodes })
|
||||||
}
|
}
|
||||||
|
|
||||||
export function listInteractionRules(params) {
|
export function listInteractionRules(params) {
|
||||||
return request({ url: '/healthlink-his/api/v1/rational-drug/interaction-rules', method: 'get', params })
|
return request({ url: '/api/v1/rational-drug/interaction-rules', method: 'get', params })
|
||||||
}
|
}
|
||||||
|
|
||||||
export function addInteractionRule(data) {
|
export function addInteractionRule(data) {
|
||||||
return request({ url: '/healthlink-his/api/v1/rational-drug/interaction-rules', method: 'post', data })
|
return request({ url: '/api/v1/rational-drug/interaction-rules', method: 'post', data })
|
||||||
}
|
}
|
||||||
|
|
||||||
export function updateInteractionRule(data) {
|
export function updateInteractionRule(data) {
|
||||||
return request({ url: '/healthlink-his/api/v1/rational-drug/interaction-rules', method: 'put', data })
|
return request({ url: '/api/v1/rational-drug/interaction-rules', method: 'put', data })
|
||||||
}
|
}
|
||||||
|
|
||||||
export function delInteractionRule(id) {
|
export function delInteractionRule(id) {
|
||||||
return request({ url: `/healthlink-his/api/v1/rational-drug/interaction-rules/${id}`, method: 'delete' })
|
return request({ url: `/api/v1/rational-drug/interaction-rules/${id}`, method: 'delete' })
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== 剂量规则 ====================
|
// ==================== 剂量规则 ====================
|
||||||
export function listDosageRules(params) {
|
export function listDosageRules(params) {
|
||||||
return request({ url: '/healthlink-his/api/v1/rational-drug/dosage-rules', method: 'get', params })
|
return request({ url: '/api/v1/rational-drug/dosage-rules', method: 'get', params })
|
||||||
}
|
}
|
||||||
|
|
||||||
export function checkDosage(drugCode, dosage, population) {
|
export function checkDosage(drugCode, dosage, population) {
|
||||||
return request({ url: '/healthlink-his/api/v1/rational-drug/check-dosage', method: 'get', params: { drugCode, dosage, population } })
|
return request({ url: '/api/v1/rational-drug/check-dosage', method: 'get', params: { drugCode, dosage, population } })
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import request from '@/utils/request'
|
|||||||
// 处方审核
|
// 处方审核
|
||||||
export function auditPrescription(data) {
|
export function auditPrescription(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/healthlink-his/api/v1/rational-drug/audit',
|
url: '/api/v1/rational-drug/audit',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
@@ -12,7 +12,7 @@ export function auditPrescription(data) {
|
|||||||
// 批量审核
|
// 批量审核
|
||||||
export function batchAudit(data) {
|
export function batchAudit(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/healthlink-his/api/v1/rational-drug/batch-audit',
|
url: '/api/v1/rational-drug/batch-audit',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
@@ -21,7 +21,7 @@ export function batchAudit(data) {
|
|||||||
// 审核统计
|
// 审核统计
|
||||||
export function getAuditStatistics() {
|
export function getAuditStatistics() {
|
||||||
return request({
|
return request({
|
||||||
url: '/healthlink-his/api/v1/rational-drug/statistics',
|
url: '/api/v1/rational-drug/statistics',
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -29,7 +29,7 @@ export function getAuditStatistics() {
|
|||||||
// 审核趋势
|
// 审核趋势
|
||||||
export function getAuditTrend(params) {
|
export function getAuditTrend(params) {
|
||||||
return request({
|
return request({
|
||||||
url: '/healthlink-his/api/v1/rational-drug/trend',
|
url: '/api/v1/rational-drug/trend',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: params
|
params: params
|
||||||
})
|
})
|
||||||
@@ -38,7 +38,7 @@ export function getAuditTrend(params) {
|
|||||||
// 审核记录
|
// 审核记录
|
||||||
export function getAuditLog(encounterId) {
|
export function getAuditLog(encounterId) {
|
||||||
return request({
|
return request({
|
||||||
url: '/healthlink-his/api/v1/rational-drug/audit-log/' + encounterId,
|
url: '/api/v1/rational-drug/audit-log/' + encounterId,
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -46,7 +46,7 @@ export function getAuditLog(encounterId) {
|
|||||||
// 配伍禁忌检查
|
// 配伍禁忌检查
|
||||||
export function checkInteraction(data) {
|
export function checkInteraction(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/healthlink-his/api/v1/rational-drug/check-interaction',
|
url: '/api/v1/rational-drug/check-interaction',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
@@ -55,7 +55,7 @@ export function checkInteraction(data) {
|
|||||||
// 配伍禁忌规则列表
|
// 配伍禁忌规则列表
|
||||||
export function listInteractionRules(params) {
|
export function listInteractionRules(params) {
|
||||||
return request({
|
return request({
|
||||||
url: '/healthlink-his/api/v1/rational-drug/interaction-rules',
|
url: '/api/v1/rational-drug/interaction-rules',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: params
|
params: params
|
||||||
})
|
})
|
||||||
@@ -64,7 +64,7 @@ export function listInteractionRules(params) {
|
|||||||
// 新增配伍禁忌规则
|
// 新增配伍禁忌规则
|
||||||
export function addInteractionRule(data) {
|
export function addInteractionRule(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/healthlink-his/api/v1/rational-drug/interaction-rules',
|
url: '/api/v1/rational-drug/interaction-rules',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
@@ -73,7 +73,7 @@ export function addInteractionRule(data) {
|
|||||||
// 修改配伍禁忌规则
|
// 修改配伍禁忌规则
|
||||||
export function updateInteractionRule(data) {
|
export function updateInteractionRule(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/healthlink-his/api/v1/rational-drug/interaction-rules',
|
url: '/api/v1/rational-drug/interaction-rules',
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
@@ -82,7 +82,7 @@ export function updateInteractionRule(data) {
|
|||||||
// 删除配伍禁忌规则
|
// 删除配伍禁忌规则
|
||||||
export function delInteractionRule(id) {
|
export function delInteractionRule(id) {
|
||||||
return request({
|
return request({
|
||||||
url: '/healthlink-his/api/v1/rational-drug/interaction-rules/' + id,
|
url: '/api/v1/rational-drug/interaction-rules/' + id,
|
||||||
method: 'delete'
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -90,7 +90,7 @@ export function delInteractionRule(id) {
|
|||||||
// 剂量规则列表
|
// 剂量规则列表
|
||||||
export function listDosageRules(params) {
|
export function listDosageRules(params) {
|
||||||
return request({
|
return request({
|
||||||
url: '/healthlink-his/api/v1/rational-drug/dosage-rules',
|
url: '/api/v1/rational-drug/dosage-rules',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: params
|
params: params
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -455,7 +455,57 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<!-- 第八行:监护人、监护人关系、监护人电话 -->
|
<!-- 第八行:联系人、联系人关系、联系人电话 -->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item
|
||||||
|
label="联系人"
|
||||||
|
prop="linkName"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model="form.linkName"
|
||||||
|
clearable
|
||||||
|
:disabled="isViewMode"
|
||||||
|
placeholder="请输入联系人"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item
|
||||||
|
label="联系人关系"
|
||||||
|
prop="linkRelationCode"
|
||||||
|
>
|
||||||
|
<el-select
|
||||||
|
v-model="form.linkRelationCode"
|
||||||
|
placeholder="联系人关系"
|
||||||
|
clearable
|
||||||
|
:disabled="isViewMode"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in link_relation_code"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item
|
||||||
|
label="联系人电话"
|
||||||
|
prop="linkTelcom"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model="form.linkTelcom"
|
||||||
|
clearable
|
||||||
|
:disabled="isViewMode"
|
||||||
|
placeholder="请输入联系人电话"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<!-- 第九行:监护人、监护人关系、监护人电话 -->
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item
|
<el-form-item
|
||||||
|
|||||||
Reference in New Issue
Block a user