优化常用查询sql的方式

master
zengwh 4 years ago
parent 96884419d8
commit f1c6987483

@ -852,15 +852,16 @@ public class TemplateSearchController {
*/ */
@RequestMapping(value = "cutomSearchTable", produces = {"text/json;charset=UTF-8"}, method = RequestMethod.POST) @RequestMapping(value = "cutomSearchTable", produces = {"text/json;charset=UTF-8"}, method = RequestMethod.POST)
@ResponseBody @ResponseBody
public String cutomSearchTable(String sql, Integer page, Integer limit, HttpServletRequest request) { public String cutomSearchTable(String selectSql,String fromTableSql,String whereSql,String orderBys,Integer page, Integer limit, HttpServletRequest request) {
if (StringUtils.isNoneBlank(sql)) { //匹配权限
Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER");
String sql = getSql(selectSql, fromTableSql, whereSql, orderBys, user);
if (StringUtils.isNoneBlank(selectSql)) {
if (null != page && null != limit) { if (null != page && null != limit) {
PageHelper.startPage(page, limit); PageHelper.startPage(page, limit);
} }
try { try {
List<CommomVo> commomVos = commomMapper.selectAll(sql); List<CommomVo> commomVos = commomMapper.selectAll(sql);
//匹配权限
Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER");
Set<String> menus = user.getMenus(); Set<String> menus = user.getMenus();
if (null != commomVos && !commomVos.isEmpty()) { if (null != commomVos && !commomVos.isEmpty()) {
if (null != menus && !menus.isEmpty()) { if (null != menus && !menus.isEmpty()) {
@ -923,6 +924,26 @@ public class TemplateSearchController {
} }
} }
private String getSql(String selectSql, String fromTableSql, String whereSql, String orderBys, Power_User user) {
String userName = user.getUserName();
String initSelectSql = "select commomtable.patient_id,CASE WHEN emr_apply_approve.id is null THEN 0 ELSE 1 END isShowDetail,CASE WHEN emr_apply_approve1.id IS NULL THEN 0 ELSE 1 END isDownload,CASE WHEN emr_lock.id is null THEN 0 ELSE 1 END lockStatus";
if(StringUtils.isNotBlank(selectSql)){
initSelectSql += "," + selectSql;
}
String initFromTableSql = " from commomtable left join emr_apply_approve on commomtable.patient_id = emr_apply_approve.patient_id and emr_apply_approve.approve_state = 1 and emr_apply_approve.effe_time > GETDATE()-1 and emr_apply_approve.applyer = '" +userName+ "' and emr_apply_approve.apply_type != 3 left join emr_apply_approve emr_apply_approve1 on commomtable.patient_id = emr_apply_approve1.patient_id and emr_apply_approve1.approve_state = 1 and emr_apply_approve1.effe_time > GETDATE()-1 and emr_apply_approve1.applyer = '" +userName+ "' and emr_apply_approve1.apply_type = 3 left join emr_lock on commomtable.patient_id = emr_lock.patient_id and emr_lock.lock_state = 1 ";
if(StringUtils.isNotBlank(fromTableSql)){
initFromTableSql += fromTableSql;
}
String sql = initSelectSql + initFromTableSql;
if(StringUtils.isNotBlank(whereSql) && !"undefined".equals(whereSql)){
sql += whereSql;
}
if(StringUtils.isNotBlank(orderBys)){
sql += orderBys;
}
return sql;
}
/** /**
* *
* @param sql * @param sql
@ -993,11 +1014,11 @@ public class TemplateSearchController {
@OptionalLog(module = "导出excel", methods = "病案查询页面") @OptionalLog(module = "导出excel", methods = "病案查询页面")
@RequestMapping(value = "exportExcel", produces = {"text/json;charset=UTF-8"}) @RequestMapping(value = "exportExcel", produces = {"text/json;charset=UTF-8"})
@ResponseBody @ResponseBody
public void exportExcel(HttpServletResponse response, String sql, String fieldCns, String tableThNames) { public void exportExcel(HttpServletResponse response,HttpServletRequest request, String selectSql,String fromTableSql,String whereSql,String orderBys, String fieldCns, String tableThNames) {
if (StringUtils.isNoneBlank(sql)) {
try { try {
//中文转换和%转义 //匹配权限
sql = sql.replaceAll("%25", "%"); Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER");
String sql = getSql(selectSql, fromTableSql, whereSql, orderBys, user);
//构造excel的数据 //构造excel的数据
List<CommomVo> list = commomMapper.selectAll(sql); List<CommomVo> list = commomMapper.selectAll(sql);
//文件名 //文件名
@ -1011,7 +1032,6 @@ public class TemplateSearchController {
e.printStackTrace(); e.printStackTrace();
} }
} }
}
//脐血库、祈福 //脐血库、祈福

@ -160,6 +160,8 @@
</head> </head>
<body> <body>
<div class="main"> <div class="main">
<input id="fromTableSql" hidden>
<input id="whereSql" hidden>
<div class="headDiv"> <div class="headDiv">
<div class="headSpanDiv"> <div class="headSpanDiv">
<span class="headspan"> <span class="headspan">
@ -850,8 +852,8 @@
$(".modal-dialog").draggable();//为模态对话框添加拖拽 $(".modal-dialog").draggable();//为模态对话框添加拖拽
}) })
</script> </script>
<script type="text/javascript" src="${path}/static/js/recordManage/commomSearch/commomListqf.js?t=1"></script>
<script type="text/javascript" src="${path}/static/js/recordManage/templateSearch/searchCommomMethodqf.js"></script> <script type="text/javascript" src="${path}/static/js/recordManage/templateSearch/searchCommomMethodqf.js"></script>
<script type="text/javascript" src="${path}/static/js/recordManage/commomSearch/commomListqf.js?t=1"></script>
<script type="text/javascript" src="${path}/static/js/dateUtil.js"></script> <script type="text/javascript" src="${path}/static/js/dateUtil.js"></script>
<script type="text/javascript" src="${path}/static/js/approveManage/approveList/approveDateCommmomMethod.js"></script> <script type="text/javascript" src="${path}/static/js/approveManage/approveList/approveDateCommmomMethod.js"></script>
<script type="text/javascript" src="${path}/static/js/commom.js"></script> <script type="text/javascript" src="${path}/static/js/commom.js"></script>

@ -249,11 +249,8 @@ var commomtable1 = 'commomtable1';
function getSql() { function getSql() {
var inputValue = getInputValue(); var inputValue = getInputValue();
if (inputValue != '') { if (inputValue != '') {
//select语句字符串
var selectNames = 'select ' + commomtable + '.patient_id,CASE WHEN emr_apply_approve.id is null THEN 0 ELSE 1 END isShowDetail,CASE WHEN emr_apply_approve1.id IS NULL THEN 0 ELSE 1 END isDownload,CASE WHEN emr_lock.id is null THEN 0 ELSE 1 END lockStatus,';
selectNames += $("#englishFields").val();
//from语句字符串 //from语句字符串
var fromTableNames = ' from '; var fromTableNames = '';
//where语句字符串 //where语句字符串
var whereNames = ' where '; var whereNames = ' where ';
//判断是否多表 //判断是否多表
@ -264,8 +261,6 @@ function getSql() {
return false; return false;
} }
}) })
//单表
fromTableNames += commomtable;
//拼接where语句 //拼接where语句
var name = ''; var name = '';
//姓名 //姓名
@ -334,6 +329,8 @@ function getSql() {
whereNames += "(" + commomtable + "." + name + " BETWEEN " + $("#age1").val() + " AND " + ($("#age2").val() - 1) + " or (" + commomtable + "." + name + "=" + $("#age2").val() + " and " + commomtable + ".age_month=0 and " + commomtable + ".age_day=0)) AND "; whereNames += "(" + commomtable + "." + name + " BETWEEN " + $("#age1").val() + " AND " + ($("#age2").val() - 1) + " or (" + commomtable + "." + name + "=" + $("#age2").val() + " and " + commomtable + ".age_month=0 and " + commomtable + ".age_day=0)) AND ";
} else if ($("#age2").val() < $("#age1").val()) { } else if ($("#age2").val() < $("#age1").val()) {
whereNames += "(" + commomtable + "." + name + " BETWEEN " + $("#age2").val() + " AND " + ($("#age1").val() - 1) + " or (" + commomtable + "." + name + "=" + $("#age1").val() + " and " + commomtable + ".age_month=0 and " + commomtable + ".age_day=0)) AND "; whereNames += "(" + commomtable + "." + name + " BETWEEN " + $("#age2").val() + " AND " + ($("#age1").val() - 1) + " or (" + commomtable + "." + name + "=" + $("#age1").val() + " and " + commomtable + ".age_month=0 and " + commomtable + ".age_day=0)) AND ";
}else if($("#age1").val() == $("#age2").val()){
whereNames += "(" + commomtable + "." + name + " = " + $("#age1").val() + " and " + commomtable + ".age_month=0 and " + commomtable + ".age_day=0) AND ";
} }
} else if (ageType == '2') { } else if (ageType == '2') {
//周 //周
@ -342,16 +339,21 @@ function getSql() {
whereNames += "(" + 'age = 0 AND ' + commomtable + "." + name + " BETWEEN " + $("#age1").val() + " AND " + ($("#age2").val() - 1) + " OR (" + commomtable + ".age = 0 AND " + commomtable + ".age_month = " + $("#age2").val() + " AND " + commomtable + ".age_day = 0)) AND "; whereNames += "(" + 'age = 0 AND ' + commomtable + "." + name + " BETWEEN " + $("#age1").val() + " AND " + ($("#age2").val() - 1) + " OR (" + commomtable + ".age = 0 AND " + commomtable + ".age_month = " + $("#age2").val() + " AND " + commomtable + ".age_day = 0)) AND ";
} else if ($("#age2").val() < $("#age1").val()) { } else if ($("#age2").val() < $("#age1").val()) {
whereNames += "(" + 'age = 0 AND ' + commomtable + "." + name + " BETWEEN " + $("#age2").val() + " AND " + ($("#age1").val() - 1) + " OR (" + commomtable + ".age = 0 AND " + commomtable + ".age_month = " + $("#age1").val() + " AND " + commomtable + ".age_day = 0)) AND "; whereNames += "(" + 'age = 0 AND ' + commomtable + "." + name + " BETWEEN " + $("#age2").val() + " AND " + ($("#age1").val() - 1) + " OR (" + commomtable + ".age = 0 AND " + commomtable + ".age_month = " + $("#age1").val() + " AND " + commomtable + ".age_day = 0)) AND ";
}else if($("#age1").val() == $("#age2").val()){
whereNames += "(" + commomtable + "." + name + " = " + $("#age1").val() + " and " + commomtable + ".age=0 and " + commomtable + ".age_day=0) AND ";
} }
} else if (ageType == '3') { } else if (ageType == '3') {
//天 //天
name = 'age_day'; name = 'age_day';
whereNames += '(age = 0 AND age_month = 0 AND ';
if ($("#age1").val() < $("#age2").val()) { if ($("#age1").val() < $("#age2").val()) {
whereNames += commomtable + "." + name + " BETWEEN " + $("#age1").val() + " AND " + $("#age2").val() + " AND "; whereNames += commomtable + "." + name + " BETWEEN " + $("#age1").val() + " AND " + $("#age2").val() + " AND ";
} else if ($("#age2").val() < $("#age1").val()) { } else if ($("#age2").val() < $("#age1").val()) {
whereNames += commomtable + "." + name + " BETWEEN " + $("#age2").val() + " AND " + $("#age1").val() + " AND "; whereNames += commomtable + "." + name + " BETWEEN " + $("#age2").val() + " AND " + $("#age1").val() + " AND ";
}else if($("#age1").val() == $("#age2").val()){
whereNames += commomtable + "." + name + " = " + $("#age1").val();
} }
whereNames += 'age = 0 AND age_month = 0 AND '; whereNames += ")";
} }
} }
//性别 //性别
@ -497,11 +499,6 @@ function getSql() {
whereNames += commomtable1 + "." + name + " LIKE '%" + $("#admiss_doctor").val() + "%' AND "; whereNames += commomtable1 + "." + name + " LIKE '%" + $("#admiss_doctor").val() + "%' AND ";
} }
var userName = "'" + $("#userName").val() + "'"; var userName = "'" + $("#userName").val() + "'";
fromTableNames += ' left join emr_apply_approve on ' + commomtable + '.patient_id = emr_apply_approve.patient_id \n' +
'and emr_apply_approve.approve_state = 1 and emr_apply_approve.effe_time > GETDATE()-1 and emr_apply_approve.applyer = ' + userName + ' and emr_apply_approve.apply_type != 3 ' +
' left join emr_apply_approve emr_apply_approve1 on ' + commomtable + '.patient_id = emr_apply_approve1.patient_id \n' +
'and emr_apply_approve1.approve_state = 1 and emr_apply_approve1.effe_time > GETDATE()-1 and emr_apply_approve1.applyer = ' + userName + ' and emr_apply_approve1.apply_type = 3' +
' left join emr_lock on ' + commomtable + '.patient_id = emr_lock.patient_id and emr_lock.lock_state = 1';
//拼接诊断表 //拼接诊断表
//全部诊断 //全部诊断
if($("#all_diag_name").val() != ''){ if($("#all_diag_name").val() != ''){
@ -533,22 +530,13 @@ function getSql() {
name = 'is_oper'; name = 'is_oper';
whereNames += commomtable + "." + name + " = '1' AND "; whereNames += commomtable + "." + name + " = '1' AND ";
} }
$("#whereSql").val('');
$("#fromTableSql").val('');
if (whereNames != ' where ') { if (whereNames != ' where ') {
whereNames = whereNames.substring(0, whereNames.length - 4); whereNames = whereNames.substring(0, whereNames.length - 4);
var orderBys = " ORDER BY " + commomtable + ".inpatient_no," + commomtable + ".admiss_times"; $("#whereSql").val(whereNames);
var sql = selectNames + fromTableNames + whereNames; $("#fromTableSql").val(fromTableNames);
$("#sql").val(sql); }
$("#orderBys").val(orderBys);
}
if (whereNames == ' where ') {
var orderBys = " ORDER BY " + commomtable + ".inpatient_no," + commomtable + ".admiss_times";
var sql = selectNames + fromTableNames;
$("#sql").val(sql);
$("#orderBys").val(orderBys);
}
//console.log(sql);
} else {
$("#sql").val("");
} }
} }
@ -599,51 +587,6 @@ function showDetail(patientId) {
//隐藏模板选项 //隐藏模板选项
//window.location.href=path+"/commom/showRecord?patientId="+patientId; //window.location.href=path+"/commom/showRecord?patientId="+patientId;
} }
//导出excel功能
function exportExcel() {
getChecked();
var checks = $("#checks").val();
if ($("#rows").val() > 5000 && checks == '') {
toastr.warning("数据量大,暂提供5000条以内数据导出!");
} else {
getSql();
var userName = "'" + $("#userName").val() + "'";
var sql = $("#sql").val();
if (sql == '') {
sql = initSql;
}
var reg = new RegExp("%", "g");//g,表示全部替换。
sql = sql.replace(reg, '%25');
var tableThNames = $("#tableThNames").val();
var fieldCns = $("#fieldCns").val();
var orderBys = $("#orderBys").val();
if (checks != '') {
//按选择框选择导出
checks = checks.substring(0, checks.length - 1);
sql += ' WHERE ' + commomtable + '.patient_id IN (' + checks + ')';
sql += orderBys;
var url = path + "/template/exportExcel";
post(url, {"sql": sql, "tableThNames": tableThNames, "fieldCns": fieldCns});
} else {
Common.confirm({
title: "提示",
message: "没有选中,您确定要按搜索栏条件导出?",
operate: function (reselt) {
if (reselt) {
//sql += orderBys;
var url = path + "/template/exportExcel";
post(url, {"sql": sql, "tableThNames": tableThNames, "fieldCns": fieldCns});
}
}
})
}
}
/*}*/
}
/*****************************************输入框边输入内容边搜索功能方法*************************************************/ /*****************************************输入框边输入内容边搜索功能方法*************************************************/
//级联病案号且长度超过4个字节才查询 //级联病案号且长度超过4个字节才查询
function getInpatientNoContents(id) { function getInpatientNoContents(id) {

@ -1,11 +1,8 @@
/***********************************************表格操作*****************************************************************/ /***********************************************表格操作*****************************************************************/
var userName = "'" + $("#userName").val() + "'"; var userName = "'" + $("#userName").val() + "'";
var initSql = "select commomtable.patient_id,CASE WHEN emr_apply_approve.id is null THEN 0 ELSE 1 END isShowDetail,CASE\n" + /*
"WHEN emr_apply_approve1.id IS NULL THEN\n" + var initSql = "select commomtable.patient_id,CASE WHEN emr_apply_approve.id is null THEN 0 ELSE 1 END isShowDetail,CASE WHEN emr_apply_approve1.id IS NULL THEN 0 ELSE 1 END isDownload,CASE WHEN emr_lock.id is null THEN 0 ELSE 1 END lockStatus,commomtable.inpatient_no,commomtable.admiss_id,commomtable.admiss_times,commomtable.name,commomtable.sex,commomtable.age,commomtable.age_month,commomtable.home_addr,commomtable.admiss_date,commomtable.dis_date,commomtable.dis_dept,commomtable.main_diag_code,commomtable.main_diag_name,commomtable.main_dis_thing,commomtable.admiss_days,commomtable.attending,commomtable.other_diag_name,commomtable.pathology_name,commomtable.poisoning_name,commomtable.is_oper from commomtable left join emr_apply_approve on commomtable.patient_id = emr_apply_approve.patient_id and emr_apply_approve.approve_state = 1 and emr_apply_approve.effe_time > GETDATE()-1 and emr_apply_approve.applyer = " +userName+ " and emr_apply_approve.apply_type != 3 left join emr_apply_approve emr_apply_approve1 on commomtable.patient_id = emr_apply_approve1.patient_id and emr_apply_approve1.approve_state = 1 and emr_apply_approve1.effe_time > GETDATE()-1 and emr_apply_approve1.applyer = " +userName+ " and emr_apply_approve1.apply_type = 3 left join emr_lock on commomtable.patient_id = emr_lock.patient_id and emr_lock.lock_state = 1 ";
"\t0\n" + */
"ELSE\n" +
"\t1\n" +
"END isDownload,CASE WHEN emr_lock.id is null THEN 0 ELSE 1 END lockStatus,commomtable.inpatient_no,commomtable.admiss_id,commomtable.admiss_times,commomtable.name,commomtable.sex,commomtable.age,commomtable.age_month,commomtable.home_addr,commomtable.admiss_date,commomtable.dis_date,commomtable.dis_dept,commomtable.main_diag_code,commomtable.main_diag_name,commomtable.main_dis_thing,commomtable.admiss_days,commomtable.attending,commomtable.other_diag_name,commomtable.pathology_name,commomtable.poisoning_name,commomtable.is_oper from commomtable left join emr_apply_approve on commomtable.patient_id = emr_apply_approve.patient_id and emr_apply_approve.approve_state = 1 and emr_apply_approve.effe_time > GETDATE()-1 and emr_apply_approve.applyer = " +userName+ " and emr_apply_approve.apply_type != 3 left join emr_apply_approve emr_apply_approve1 on commomtable.patient_id = emr_apply_approve1.patient_id and emr_apply_approve1.approve_state = 1 and emr_apply_approve1.effe_time > GETDATE()-1 and emr_apply_approve1.applyer = " +userName+ " and emr_apply_approve1.apply_type = 3 left join emr_lock on commomtable.patient_id = emr_lock.patient_id and emr_lock.lock_state = 1 ";
//定义查看详情的请求地址url //定义查看详情的请求地址url
function returnShowDetailUrl(patientId){ function returnShowDetailUrl(patientId){
return path + '/commom/showRecord174?patientId=' + patientId; return path + '/commom/showRecord174?patientId=' + patientId;
@ -134,13 +131,6 @@ function freshTable(){
map1['align'] = 'center'; map1['align'] = 'center';
map1['formatter'] = 'AddFunctionAlty'; map1['formatter'] = 'AddFunctionAlty';
columns.push(map1) columns.push(map1)
var sql = $("#sql").val();
if(sql == ''){
sql = initSql;
}
var orderBys = $("#orderBys").val();
sql += orderBys;
//console.log(sql)
var flag = $("#showPrint").val(); var flag = $("#showPrint").val();
//固定列标识 //固定列标识
var mixFlag = false; var mixFlag = false;
@ -176,7 +166,10 @@ function freshTable(){
url:path+'/template/cutomSearchTable',//排序方式 url:path+'/template/cutomSearchTable',//排序方式
queryParams: function (params) { queryParams: function (params) {
return{ return{
sql:sql, selectSql:$("#englishFields").val(),
fromTableSql:$("#fromTableSql").val(),
whereSql:$("#whereSql").val(),
orderBys:$("#orderBys").val(),
limit : params.limit, // 每页显示数量 limit : params.limit, // 每页显示数量
offset : params.offset, // SQL语句起始索引 offset : params.offset, // SQL语句起始索引
page : (params.offset / params.limit) + 1 //当前页码 page : (params.offset / params.limit) + 1 //当前页码
@ -295,8 +288,38 @@ function freshTable(){
} }
} }
}) })
}, }
})
}
//导出excel功能
function exportExcel() {
getChecked();
var checks = $("#checks").val();
if ($("#rows").val() > 5000 && checks == '') {
toastr.warning("数据量大,暂提供5000条以内数据导出!");
} else {
var tableThNames = $("#tableThNames").val();
var fieldCns = $("#fieldCns").val();
if (checks != '') {
//按选择框选择导出
checks = checks.substring(0, checks.length - 1);
var whereSql = ' WHERE ' + commomtable + '.patient_id IN (' + checks + ')';
var url = path + "/template/exportExcel";
post(url, {"selectSql": $("#englishFields").val(),"whereSql":whereSql,"tableThNames": tableThNames, "fieldCns": fieldCns});
} else {
getSql();
Common.confirm({
title: "提示",
message: "没有选中,您确定要按搜索栏条件导出?",
operate: function (reselt) {
if (reselt) {
var url = path + "/template/exportExcel";
post(url, {"selectSql": $("#englishFields").val(),"fromTableSql":$("#fromTableSql").val(),"whereSql":$("#whereSql").val(),"orderBys":$("#orderBys").val(),"tableThNames": tableThNames, "fieldCns": fieldCns});
}
}
}) })
}
}
} }
function btn(){ function btn(){
var url = path + "/printInfoList/pageUI174"; var url = path + "/printInfoList/pageUI174";

Loading…
Cancel
Save