实现科室护士管理患者排队叫号队列,实现患者智能分诊、队列调整、叫号控制等功能
This commit is contained in:
@@ -1,55 +0,0 @@
|
|||||||
#\u9519\u8bef\u6d88\u606f
|
|
||||||
not.null=* \u5fc5\u987b\u586b\u5199
|
|
||||||
user.jcaptcha.error=\u9a8c\u8bc1\u7801\u9519\u8bef
|
|
||||||
user.jcaptcha.expire=\u9a8c\u8bc1\u7801\u5df2\u5931\u6548
|
|
||||||
user.not.exists=\u7528\u6237\u4e0d\u5b58\u5728/\u5bc6\u7801\u9519\u8bef
|
|
||||||
user.password.not.match=\u7528\u6237\u4e0d\u5b58\u5728/\u5bc6\u7801\u9519\u8bef
|
|
||||||
user.password.retry.limit.count=\u5bc6\u7801\u8f93\u5165\u9519\u8bef{0}\u6b21
|
|
||||||
user.password.retry.limit.exceed=\u5bc6\u7801\u8f93\u5165\u9519\u8bef{0}\u6b21\uff0c\u5e10\u6237\u9501\u5b9a{1}\u5206\u949f
|
|
||||||
user.password.delete=\u5bf9\u4e0d\u8d77\uff0c\u60a8\u7684\u8d26\u53f7\u5df2\u88ab\u5220\u9664
|
|
||||||
user.blocked=\u7528\u6237\u5df2\u5c01\u7981\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458
|
|
||||||
role.blocked=\u89d2\u8272\u5df2\u5c01\u7981\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458
|
|
||||||
login.blocked=\u5f88\u9057\u61be\uff0c\u8bbf\u95eeIP\u5df2\u88ab\u5217\u5165\u7cfb\u7edf\u9ed1\u540d\u5355
|
|
||||||
user.logout.success=\u9000\u51fa\u6210\u529f
|
|
||||||
length.not.valid=\u957f\u5ea6\u5fc5\u987b\u5728{min}\u5230{max}\u4e2a\u5b57\u7b26\u4e4b\u95f4
|
|
||||||
user.username.not.valid=* 2\u523020\u4e2a\u6c49\u5b57\u3001\u5b57\u6bcd\u3001\u6570\u5b57\u6216\u4e0b\u5212\u7ebf\u7ec4\u6210\uff0c\u4e14\u5fc5\u987b\u4ee5\u975e\u6570\u5b57\u5f00\u5934
|
|
||||||
user.password.not.valid=* 5-50\u4e2a\u5b57\u7b26
|
|
||||||
user.email.not.valid=\u90ae\u7bb1\u683c\u5f0f\u9519\u8bef
|
|
||||||
user.mobile.phone.number.not.valid=\u624b\u673a\u53f7\u683c\u5f0f\u9519\u8bef
|
|
||||||
user.login.success=\u767b\u5f55\u6210\u529f\u6210\u679c
|
|
||||||
user.register.success=\u6ce8\u518c\u6210\u529f
|
|
||||||
user.notfound=\u8bf7\u91cd\u65b0\u767b\u5f55
|
|
||||||
user.forcelogout=\u7ba1\u7406\u5458\u5f3a\u5236\u9000\u51fa\uff0c\u8bf7\u91cd\u65b0\u767b\u5f55
|
|
||||||
user.unknown.error=\u672a\u77e5\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u767b\u5f55
|
|
||||||
##\u6587\u4ef6\u4e0a\u4f20\u6d88\u606f
|
|
||||||
upload.exceed.maxSize=\u4e0a\u4f20\u7684\u6587\u4ef6\u5927\u5c0f\u8d85\u51fa\u9650\u5236\u7684\u6587\u4ef6\u5927\u5c0f\uff01<br/>\u5141\u8bb8\u7684\u6587\u4ef6\u6700\u5927\u5927\u5c0f\u662f\uff1a{0}MB\uff01
|
|
||||||
upload.filename.exceed.length=\u4e0a\u4f20\u7684\u6587\u4ef6\u540d\u6700\u957f{0}\u4e2a\u5b57\u7b26
|
|
||||||
##\u6743\u9650
|
|
||||||
no.permission=\u60a8\u6ca1\u6709\u6570\u636e\u7684\u6743\u9650\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\u6dfb\u52a0\u6743\u9650 [{0}]
|
|
||||||
no.create.permission=\u60a8\u6ca1\u6709\u521b\u5efa\u6570\u636e\u7684\u6743\u9650\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\u6dfb\u52a0\u6743\u9650 [{0}]
|
|
||||||
no.update.permission=\u60a8\u6ca1\u6709\u4fee\u6539\u6570\u636e\u7684\u6743\u9650\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\u6dfb\u52a0\u6743\u9650 [{0}]
|
|
||||||
no.delete.permission=\u60a8\u6ca1\u6709\u5220\u9664\u6570\u636e\u7684\u6743\u9650\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\u6dfb\u52a0\u6743\u9650 [{0}]
|
|
||||||
no.export.permission=\u60a8\u6ca1\u6709\u5bfc\u51fa\u6570\u636e\u7684\u6743\u9650\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\u6dfb\u52a0\u6743\u9650 [{0}]
|
|
||||||
no.view.permission=\u60a8\u6ca1\u6709\u67e5\u770b\u6570\u636e\u7684\u6743\u9650\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\u6dfb\u52a0\u6743\u9650 [{0}]
|
|
||||||
apl.common.M00001={0}\u6dfb\u52a0\u6210\u529f
|
|
||||||
apl.common.M00002={0}\u4fdd\u5b58\u6210\u529f
|
|
||||||
apl.common.M00003={0}\u5df2\u7ecf\u5b58\u5728
|
|
||||||
apl.common.M00004={0}\u64cd\u4f5c\u6210\u529f
|
|
||||||
apl.common.M00005={0}\u5220\u9664\u6210\u529f
|
|
||||||
apl.common.M00006=\u64cd\u4f5c\u5931\u8d25,\u8be5\u6570\u636e\u5df2\u88ab\u4ed6\u4eba\u5220\u9664,\u8bf7\u5237\u65b0\u540e\u91cd\u8bd5
|
|
||||||
apl.common.M00007=\u64cd\u4f5c\u5931\u8d25,\u8be5\u6570\u636e\u5df2\u88ab\u4ed6\u4eba\u66f4\u6539,\u8bf7\u5237\u65b0\u540e\u91cd\u8bd5
|
|
||||||
apl.common.M00008=\u8bf7\u52ff\u91cd\u590d\u63d0\u4ea4
|
|
||||||
apl.common.M00009=\u67e5\u8be2\u6210\u529f
|
|
||||||
apl.common.M00010=\u64cd\u4f5c\u5931\u8d25,\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458
|
|
||||||
apl.chargeRefund.M00001=\u8be5\u6536\u8d39\u5355\u76f8\u5173{0}\u5df2\u7ecf\u53d1\u51fa\uff0c\u8bf7\u5148\u9000\u836f\u540e\u518d\u8fdb\u884c\u9000\u8d39
|
|
||||||
apl.payment.M00001=\u5404\u7f34\u8d39\u6e20\u9053\u5b9e\u6536\u91d1\u989d\u5408\u8ba1\u4e0d\u7b49\u4e8e\u5b9e\u6536\u91d1\u989d
|
|
||||||
apl.payment.M00002=\u5b9e\u6536\u91d1\u989d\u5408\u8ba1\u4e0d\u7b49\u4e8e\u5e94\u6536\u91d1\u989d
|
|
||||||
apl.payment.M00003=\u8bf7\u9009\u62e9\u652f\u4ed8\u65b9\u5f0f
|
|
||||||
apl.payment.M00004=\u67e5\u8be2\u6210\u529f
|
|
||||||
apl.payment.M00005=\u64cd\u4f5c\u5931\u8d25,\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458
|
|
||||||
apl.payment.M00006=\u6210\u529f\u6536\u8d39
|
|
||||||
apl.payment.M00007=\u672a\u67e5\u8be2\u5230\u6536\u8d39\u9879\u76ee
|
|
||||||
apl.payment.M00008=\u672a\u67e5\u8be2\u5230{0}\u8d26\u6237\u4fe1\u606f
|
|
||||||
apl.payment.M00009=\u672a\u67e5\u8be2\u5230\u6536\u8d39\u9879\u76ee\uff0c\u4e0d\u9700\u8981\u8f6c\u6362\u8d26\u6237
|
|
||||||
apl.adjustPrice.M00001=\u6267\u884c\u5931\u8d25\uff0c\u672a\u52a0\u8f7d\u5230\u4efb\u4f55\u6570\u636e\uff01
|
|
||||||
apl.adjustPrice.M00002=\u6267\u884c\u5931\u8d25\uff0c\u6539\u4ef7\u5355\u4e2d\u6709\u6b63\u5728\u5ba1\u6838\u4e2d\u7684\u8d27\u54c1\uff0c\u8bf7\u68c0\u67e5\u540e\u91cd\u65b0\u63d0\u4ea4\uff01
|
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.openhis.appointmentmanage.mapper.DoctorScheduleMapper">
|
||||||
|
|
||||||
|
<!-- 自定义插入方法,明确排除id字段(数据库GENERATED ALWAYS) -->
|
||||||
|
<insert id="insertWithoutId" parameterType="com.openhis.appointmentmanage.domain.DoctorSchedule" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
|
||||||
|
INSERT INTO adm_doctor_schedule (
|
||||||
|
weekday,
|
||||||
|
time_period,
|
||||||
|
doctor,
|
||||||
|
clinic,
|
||||||
|
start_time,
|
||||||
|
end_time,
|
||||||
|
limit_number,
|
||||||
|
call_sign_record,
|
||||||
|
register_item,
|
||||||
|
register_fee,
|
||||||
|
diagnosis_item,
|
||||||
|
diagnosis_fee,
|
||||||
|
is_online,
|
||||||
|
is_stopped,
|
||||||
|
stop_reason,
|
||||||
|
dept_id
|
||||||
|
<if test="createTime != null">, create_time</if>
|
||||||
|
<if test="updateTime != null">, update_time</if>
|
||||||
|
) VALUES (
|
||||||
|
#{weekday},
|
||||||
|
#{timePeriod},
|
||||||
|
#{doctor},
|
||||||
|
#{clinic},
|
||||||
|
#{startTime},
|
||||||
|
#{endTime},
|
||||||
|
#{limitNumber},
|
||||||
|
#{callSignRecord},
|
||||||
|
#{registerItem},
|
||||||
|
#{registerFee},
|
||||||
|
#{diagnosisItem},
|
||||||
|
#{diagnosisFee},
|
||||||
|
#{isOnline},
|
||||||
|
#{isStopped},
|
||||||
|
#{stopReason},
|
||||||
|
#{deptId}
|
||||||
|
<if test="createTime != null">, #{createTime}</if>
|
||||||
|
<if test="updateTime != null">, #{updateTime}</if>
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
|
|
||||||
@@ -23,6 +23,7 @@
|
|||||||
<el-option label="全部" value="0" />
|
<el-option label="全部" value="0" />
|
||||||
<el-option label="儿科" value="1" />
|
<el-option label="儿科" value="1" />
|
||||||
<el-option label="神经内科" :value="2" />
|
<el-option label="神经内科" :value="2" />
|
||||||
|
<el-option label="心内科" :value="3" />
|
||||||
</el-select>
|
</el-select>
|
||||||
<el-date-picker v-model="searchForm.endTime" v-if="searchForm.drugType == '1'" type="date" placeholder="截止时间"
|
<el-date-picker v-model="searchForm.endTime" v-if="searchForm.drugType == '1'" type="date" placeholder="截止时间"
|
||||||
style="width: 100px" />
|
style="width: 100px" />
|
||||||
|
|||||||
@@ -25,3 +25,103 @@ export function updateCallNumberVoiceConfig(data) {
|
|||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 分诊排队管理相关API
|
||||||
|
// 获取智能候选池(已签到未入队)
|
||||||
|
export function getCandidatePool(params) {
|
||||||
|
return request({
|
||||||
|
url: '/triage/queue/candidatePool',
|
||||||
|
method: 'get',
|
||||||
|
params: params,
|
||||||
|
skipErrorMsg: true // 跳过错误提示,由组件处理
|
||||||
|
}).catch(() => {
|
||||||
|
// 返回一个 rejected promise,让组件可以捕获
|
||||||
|
return Promise.reject(new Error('API未实现'))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取智能队列(当前队列)
|
||||||
|
export function getQueueList(params) {
|
||||||
|
return request({
|
||||||
|
url: '/triage/queue/list',
|
||||||
|
method: 'get',
|
||||||
|
params: params,
|
||||||
|
skipErrorMsg: true // 跳过错误提示,由组件处理
|
||||||
|
}).catch(() => {
|
||||||
|
// 返回一个 rejected promise,让组件可以捕获
|
||||||
|
return Promise.reject(new Error('API未实现'))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取统计信息
|
||||||
|
export function getQueueStatistics(params) {
|
||||||
|
return request({
|
||||||
|
url: '/triage/queue/statistics',
|
||||||
|
method: 'get',
|
||||||
|
params: params,
|
||||||
|
skipErrorMsg: true // 跳过错误提示,由组件处理
|
||||||
|
}).catch(() => {
|
||||||
|
// 返回一个 rejected promise,让组件可以捕获
|
||||||
|
return Promise.reject(new Error('API未实现'))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将患者加入队列
|
||||||
|
export function addToQueue(data) {
|
||||||
|
return request({
|
||||||
|
url: '/triage/queue/add',
|
||||||
|
method: 'post',
|
||||||
|
data: data,
|
||||||
|
skipErrorMsg: true
|
||||||
|
}).catch(() => Promise.reject(new Error('API未实现')))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 调整队列顺序
|
||||||
|
export function adjustQueueOrder(data) {
|
||||||
|
return request({
|
||||||
|
url: '/triage/queue/adjust',
|
||||||
|
method: 'put',
|
||||||
|
data: data,
|
||||||
|
skipErrorMsg: true
|
||||||
|
}).catch(() => Promise.reject(new Error('API未实现')))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 叫号控制
|
||||||
|
export function callPatient(data) {
|
||||||
|
return request({
|
||||||
|
url: '/triage/queue/call',
|
||||||
|
method: 'post',
|
||||||
|
data: data,
|
||||||
|
skipErrorMsg: true
|
||||||
|
}).catch(() => Promise.reject(new Error('API未实现')))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 跳过患者
|
||||||
|
export function skipPatient(data) {
|
||||||
|
return request({
|
||||||
|
url: '/triage/queue/skip',
|
||||||
|
method: 'post',
|
||||||
|
data: data,
|
||||||
|
skipErrorMsg: true
|
||||||
|
}).catch(() => Promise.reject(new Error('API未实现')))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 完成叫号
|
||||||
|
export function completeCall(data) {
|
||||||
|
return request({
|
||||||
|
url: '/triage/queue/complete',
|
||||||
|
method: 'post',
|
||||||
|
data: data,
|
||||||
|
skipErrorMsg: true
|
||||||
|
}).catch(() => Promise.reject(new Error('API未实现')))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 过号重排
|
||||||
|
export function requeuePatient(data) {
|
||||||
|
return request({
|
||||||
|
url: '/triage/queue/requeue',
|
||||||
|
method: 'post',
|
||||||
|
data: data,
|
||||||
|
skipErrorMsg: true
|
||||||
|
}).catch(() => Promise.reject(new Error('API未实现')))
|
||||||
|
}
|
||||||
57
迁移记录-DB变更记录/202512251200 add_table adm_doctor_schedule.sql
Normal file
57
迁移记录-DB变更记录/202512251200 add_table adm_doctor_schedule.sql
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
-- adm_doctor_schedule definition
|
||||||
|
|
||||||
|
-- Drop table
|
||||||
|
|
||||||
|
-- DROP TABLE adm_doctor_schedule;
|
||||||
|
|
||||||
|
CREATE TABLE adm_doctor_schedule (
|
||||||
|
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||||
|
weekday VARCHAR(50) NULL,
|
||||||
|
time_period VARCHAR(50) NULL,
|
||||||
|
doctor VARCHAR(100) NULL,
|
||||||
|
clinic VARCHAR(100) NULL,
|
||||||
|
start_time TIME NULL,
|
||||||
|
end_time TIME NULL,
|
||||||
|
limit_number INTEGER NULL,
|
||||||
|
call_sign_record VARCHAR(500) NOT NULL DEFAULT '',
|
||||||
|
register_item VARCHAR(200) NULL,
|
||||||
|
register_fee INTEGER NULL,
|
||||||
|
diagnosis_item VARCHAR(200) NULL,
|
||||||
|
diagnosis_fee INTEGER NULL,
|
||||||
|
is_online BOOLEAN NULL,
|
||||||
|
is_stopped BOOLEAN NULL,
|
||||||
|
stop_reason VARCHAR(500) NULL,
|
||||||
|
dept_id INTEGER NULL,
|
||||||
|
create_time TIMESTAMPTZ(6) NULL,
|
||||||
|
update_time TIMESTAMPTZ(6) NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
COMMENT ON TABLE adm_doctor_schedule IS '医生排班表';
|
||||||
|
|
||||||
|
-- Column comments
|
||||||
|
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.id IS '主键ID(GENERATED ALWAYS)';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.weekday IS '星期';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.time_period IS '时段(上午/下午)';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.doctor IS '医生姓名';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.clinic IS '诊室';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.start_time IS '开始时间';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.end_time IS '结束时间';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.limit_number IS '限号数量';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.call_sign_record IS '号源记录';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.register_item IS '挂号项目';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.register_fee IS '挂号费';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.diagnosis_item IS '诊查项目';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.diagnosis_fee IS '诊疗费';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.is_online IS '是否线上挂号';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.is_stopped IS '是否停诊';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.stop_reason IS '停诊原因';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.dept_id IS '关联科室ID';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.create_time IS '创建时间';
|
||||||
|
COMMENT ON COLUMN adm_doctor_schedule.update_time IS '更新时间';
|
||||||
|
|
||||||
|
-- 插入迁移记录
|
||||||
|
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
|
||||||
|
VALUES ('202512251200 add_table adm_doctor_schedule', '1.0.0');
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user