package com.jd.doctor.v2.doctor.entity;
import lombok.extern.slf4j.Slf4j;
import java.util.*;
@Slf4j
public class SqlFormatUtil {
static String preparing = "SELECT COUNT(1) FROM (SELECT d.id, h.drug_code, h.drug_name, h.py_code, h.wb_code, d.examine, h.drug_type, h.is_split, h.trade_name, h.dosage_code, h.dosage_name, h.specifications, h.manufactor_code, h.manufactor_name, h.approval_number, h.medical_insurance_code, h.medical_insurance_type, h.drug_unit, h.pack_rate, h.base_drug_type, h.ismonitor, h.hospital_branch_code, h.hospital_code, d.pharmacy_code, h.tenant_id, d.deleted AS storedeleted, h.ismedicaluse, h.price_hospital, d.price_drugstore, d.hospital_drug_id, h.default_unit, h.default_way, h.default_frequency, h.default_dose, d.created_time, h.id AS hospitalId, h.deleted, ds.deleted drugstore_deleted, ds.type drugstore_type, d.stock, h.med_list_codg, h.medins_list_codg, h.drug_introduction FROM drug_catalogue_hospital h LEFT JOIN drug_catalogue_drugstore d ON d.hospital_drug_id = h.id AND d.tenant_id = '100053' LEFT JOIN drugstore_settings ds ON ds.code = d.pharmacy_code AND ds.deleted = 'N' AND ds.tenant_id = '100053' WHERE h.id IN (SELECT hospital_drug_id FROM drug_catalogue_drugstore WHERE hospital_drug_id = h.id AND deleted = 'N' AND `status` = 1 AND tenant_id = '100053') AND h.tenant_id = '100053') c WHERE (deleted = ? AND storedeleted = ? AND drugstore_deleted = ? AND tenant_id = ? AND hospital_code = ? AND pharmacy_code = ? AND hospital_branch_code = ?)";
static String parameters = "N(String), N(String), N(String), 100053(String), H0001(String), D72.01.03.05(String), H0001(String)";
public static void main(String[] args) {
String sql = preparing.replaceAll("= \\?", "= %s");
List<String> list = getParametersMap(parameters);
if (!list.isEmpty()) {
String newSql = String.format(sql, list.toArray());
log.info("--------->");
log.info("格式完成的SQL:{}", newSql);
log.info("<---------");
}
}
/**
* 参数格式化
* @param parameters: 参数字符串
* @return 格式化后的参数集合
*/
private static List<String> getParametersMap(String parameters) {
List<String> list = new ArrayList<>();
String[] parametersList = parameters.split(", ");
for (String s : parametersList) {
String type = s.substring(s.lastIndexOf("(") + 1, s.lastIndexOf(")"));
String parameter = s.substring(0, s.lastIndexOf("("));
list.add(parameterFormat(type, parameter));
}
return list;
}
/**
* 单个参数格式化
* @param type:参数类型
* @param parameter:参数值
* @return 格式化后的参数
*/
private static String parameterFormat(String type, String parameter) {
if (null == type) {
throw new RuntimeException("类型不能为空!");
}
String parameterFormat;
switch (type) {
case "String":
case "Timestamp":
parameterFormat = "'" + parameter + "'";
break;
case "Boolean":
case "Integer":
parameterFormat = parameter;
break;
default:
log.info("类型不匹配:{}", type);
throw new RuntimeException("类型不匹配!");
}
return parameterFormat;
}
}
