优化常用查询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)
@ResponseBody
public String cutomSearchTable(String sql, Integer page, Integer limit, HttpServletRequest request) {
if (StringUtils.isNoneBlank(sql)) {
public String cutomSearchTable(String selectSql,String fromTableSql,String whereSql,String orderBys,Integer page, Integer limit, HttpServletRequest request) {
//匹配权限
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) {
PageHelper.startPage(page, limit);
}
try {
List<CommomVo> commomVos = commomMapper.selectAll(sql);
//匹配权限
Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER");
Set<String> menus = user.getMenus();
if (null != commomVos && !commomVos.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
@ -993,23 +1014,22 @@ public class TemplateSearchController {
@OptionalLog(module = "导出excel", methods = "病案查询页面")
@RequestMapping(value = "exportExcel", produces = {"text/json;charset=UTF-8"})
@ResponseBody
public void exportExcel(HttpServletResponse response, String sql, String fieldCns, String tableThNames) {
if (StringUtils.isNoneBlank(sql)) {
try {
//中文转换和%转义
sql = sql.replaceAll("%25", "%");
//构造excel的数据
List<CommomVo> list = commomMapper.selectAll(sql);
//文件名
String fileName = "档案管理常用查询导出数据(" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + ").xls";
//ExportExcelUtil
ExportExcelUtil exportExcelUtil = new ExportExcelUtil();
//导出excel的操作
exportExcelUtil.expordExcel(tableThNames, fieldCns, list, fileName, response);
} catch (Exception e) {
ExceptionPrintUtil.printException(e);
e.printStackTrace();
}
public void exportExcel(HttpServletResponse response,HttpServletRequest request, String selectSql,String fromTableSql,String whereSql,String orderBys, String fieldCns, String tableThNames) {
try {
//匹配权限
Power_User user = (Power_User) request.getSession().getAttribute("CURRENT_USER");
String sql = getSql(selectSql, fromTableSql, whereSql, orderBys, user);
//构造excel的数据
List<CommomVo> list = commomMapper.selectAll(sql);
//文件名
String fileName = "档案管理常用查询导出数据(" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + ").xls";
//ExportExcelUtil
ExportExcelUtil exportExcelUtil = new ExportExcelUtil();
//导出excel的操作
exportExcelUtil.expordExcel(tableThNames, fieldCns, list, fileName, response);
} catch (Exception e) {
ExceptionPrintUtil.printException(e);
e.printStackTrace();
}
}

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

@ -249,11 +249,8 @@ var commomtable1 = 'commomtable1';
function getSql() {
var inputValue = getInputValue();
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语句字符串
var fromTableNames = ' from ';
var fromTableNames = '';
//where语句字符串
var whereNames = ' where ';
//判断是否多表
@ -264,8 +261,6 @@ function getSql() {
return false;
}
})
//单表
fromTableNames += commomtable;
//拼接where语句
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 ";
} 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 ";
}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') {
//周
@ -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 ";
} 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 ";
}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') {
//天
name = 'age_day';
whereNames += '(age = 0 AND age_month = 0 AND ';
if ($("#age1").val() < $("#age2").val()) {
whereNames += commomtable + "." + name + " BETWEEN " + $("#age1").val() + " AND " + $("#age2").val() + " AND ";
} else if ($("#age2").val() < $("#age1").val()) {
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 ";
}
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() != ''){
@ -533,22 +530,13 @@ function getSql() {
name = 'is_oper';
whereNames += commomtable + "." + name + " = '1' AND ";
}
$("#whereSql").val('');
$("#fromTableSql").val('');
if (whereNames != ' where ') {
whereNames = whereNames.substring(0, whereNames.length - 4);
var orderBys = " ORDER BY " + commomtable + ".inpatient_no," + commomtable + ".admiss_times";
var sql = selectNames + fromTableNames + whereNames;
$("#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("");
$("#whereSql").val(whereNames);
$("#fromTableSql").val(fromTableNames);
}
}
}
@ -599,51 +587,6 @@ function showDetail(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个字节才查询
function getInpatientNoContents(id) {

@ -1,11 +1,8 @@
/***********************************************表格操作*****************************************************************/
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" +
"\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 ";
/*
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 ";
*/
//定义查看详情的请求地址url
function returnShowDetailUrl(patientId){
return path + '/commom/showRecord174?patientId=' + patientId;
@ -134,13 +131,6 @@ function freshTable(){
map1['align'] = 'center';
map1['formatter'] = 'AddFunctionAlty';
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 mixFlag = false;
@ -176,7 +166,10 @@ function freshTable(){
url:path+'/template/cutomSearchTable',//排序方式
queryParams: function (params) {
return{
sql:sql,
selectSql:$("#englishFields").val(),
fromTableSql:$("#fromTableSql").val(),
whereSql:$("#whereSql").val(),
orderBys:$("#orderBys").val(),
limit : params.limit, // 每页显示数量
offset : params.offset, // SQL语句起始索引
page : (params.offset / params.limit) + 1 //当前页码
@ -295,9 +288,39 @@ 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(){
var url = path + "/printInfoList/pageUI174";
window.location.href = url;

Loading…
Cancel
Save