Java tutorial
package cn.com.sinosoft.cimp.portal.ws; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import org.apache.commons.lang.StringEscapeUtils; import org.hibernate.type.StringType; import org.hibernate.type.Type; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import cn.com.sinosoft.cimp.common.util.SqlUtil; import cn.com.sinosoft.cimp.common.util.StrUtils; import cn.com.sinosoft.cimp.core.service.SimpleServiceImpl; import cn.com.sinosoft.cimp.core.service.model.PageParam; import cn.com.sinosoft.cimp.core.service.model.PagingResult; import cn.com.sinosoft.cimp.core.service.model.PagingSrcSql; /** * * @ClassName: PublicSearchService * @Description: * @author ZhangPan * @date 2015-9-10 ?10:23:27 */ @Service public class PublicSearchService extends SimpleServiceImpl { public static Map<String, String[][]> INFOS = new HashMap<String, String[][]>(); private static Properties TYPE_PROPER; private static String[] SEARCH_LIKE; static { //?? String[] SHOW_G1 = new String[] { "FOODNAME", "DECLAREUNIT", "DATE_ACCEPTED", "DATE_REVIEW", "REVIEWRESULT", "DATE_DATA_ACCESS" }; String[] SHOW_G2 = new String[] { "COMP_NAME", "REG_ADDR", "BUS_ADDR", "OCODE", "PRINCIPAL", "DATE_DATA_ACCESS" }; String[] SHOW_G3 = new String[] { "COMP_NAME", "REG_ADDR", "BUS_ADDR", "OCODE", "PRINCIPAL", "HEALTH_LICENSE", "LICENSEEND", "LICENSESTART", "DATE_DATA_ACCESS" }; String[] SHOW_G4 = new String[] { "COMP_NAME", "REG_ADDR", "BUS_ADDR", "OCODE", "PRINCIPAL", "RECORD_DATE", "CLOSED_DATE", "DATE_DATA_ACCESS" }; //PUNISHED_DESC FACT_DESC ? //? String[] SEARCH_G1 = new String[] { "FOODNAME", "DECLAREUNIT" }; String[] SEARCH_G2 = new String[] { "COMP_NAME", "HEALTH_LICENSE", "BUS_ADDR" }; String[] SEARCH_G3 = new String[] { "COMP_NAME", "BUS_ADDR", "CLOSED_DATE", "RECORD_DATE" }; //?? SEARCH_LIKE = new String[] { "DOCTOR_NAME", "DOCTOR_UNITNAME", "NURSE_NAME", "NURSE_UNITNAME", "NAME", "FOODNAME", "DECLAREUNIT", "COMP_NAME", "BUS_ADDR" }; INFOS.put("0101000000", new String[][] { { "CIMP_ST_DOCTOR" }, { "DOCTOR_NAME", "DOCTOR_SEX", "PARCTICE_LEVEL", "PARCTICE_SORT", "DOCTOR_UNITNAME", "DOCTOR_WORK_CODE", "DATE_DATA_ACCESS" }, { "DOCTOR_NAME", "DOCTOR_SEX", "PARCTICE_SORT", "DOCTOR_UNITNAME" } });//? INFOS.put("0102000000", new String[][] { { "CIMP_ST_NURSE" }, { "NURSE_NAME", "NURSE_SEX", "NURSE_UNITNAME", "NURSE_CERT_CODE", "DATE_DATA_ACCESS" }, { "NURSE_NAME", "NURSE_SEX", "NURSE_UNITNAME" } });//? INFOS.put("0103000000", new String[][] { { "PER_ST_DISINFECTANT" }, SHOW_G1, SEARCH_G1 });//???? INFOS.put("0104000000", new String[][] { { "PER_ST_WATER" }, SHOW_G1, SEARCH_G1 });//?????? INFOS.put("0105000000", new String[][] { { "CIMP_ST_FOOD_LICENSE" }, SHOW_G1, SEARCH_G1 });//?????? INFOS.put("0106000000", new String[][] { { "CIMP_ST_FOOD_LICENSE" }, SHOW_G1, SEARCH_G1 });//????? INFOS.put("0110000000", new String[][] { { "CIMP_ST_DISINFECTANT" }, SHOW_G2, SEARCH_G2 });//???? INFOS.put("0107000000", new String[][] { { "CIMP_ST_PUBLICPLACES" }, SHOW_G3, SEARCH_G2 });//??? INFOS.put("0109000000", new String[][] { { "CIMP_ST_DISINFECTANT" }, SHOW_G3, SEARCH_G2 });//???? INFOS.put("0108000000", new String[][] { { "CIMP_ST_WATER" }, SHOW_G3, SEARCH_G2 });//????? INFOS.put("0111000000", new String[][] { { "CIMP_ST_WATER" }, SHOW_G2, SEARCH_G3 });//?????? INFOS.put("0121000000", new String[][] { { "CIMP_ST_RADIATION" }, SHOW_G2, SEARCH_G3 });//??? INFOS.put("0120000000", new String[][] { { "CIMP_ST_OCC_SERVICES" }, SHOW_G2, SEARCH_G3 });//???? /**/ /*INFOS.put("0201010000", new String[][]{{"CIMP_ST_DISCIPLINE"}, SHOW_G4, SEARCH_G3}); INFOS.put("0202020000", new String[][]{{"CIMP_ST_DISCIPLINE"}, SHOW_G4, SEARCH_G3}); INFOS.put("0208070000", new String[][]{{"CIMP_ST_DISCIPLINE"}, SHOW_G4, SEARCH_G3}); INFOS.put("0203050000", new String[][]{{"CIMP_ST_DISCIPLINE"}, SHOW_G4, SEARCH_G3}); INFOS.put("0204030000", new String[][]{{"CIMP_ST_DISCIPLINE"}, SHOW_G4, SEARCH_G3}); INFOS.put("0205040000", new String[][]{{"CIMP_ST_DISCIPLINE"}, SHOW_G4, SEARCH_G3}); INFOS.put("0206080000", new String[][]{{"CIMP_ST_DISCIPLINE"}, SHOW_G4, SEARCH_G3}); INFOS.put("0207020000", new String[][]{{"CIMP_ST_DISCIPLINE"}, SHOW_G4, SEARCH_G3});*/ // /*INFOS.put("0401000000", new String[][]{{"CIMP_ST_EX_DONATE_BLOOD"}, {"NAME", "SEX", "DATE_BIRTH", "DATE_BLOOD", "TYPE_BLOOD", "QUANTITY_BLOOD", "DATE_DATA_ACCESS"}, {"NAME", "SEX"} });*/ } /** * ?? * * @param type * @param pageParam * @return * @author <a href="mailto:nytclizy@gmail.com">?</a> */ @Cacheable(value = "cimpdata") public PagingResult getPubsearchInfos(String type, Map<String, String> params, PageParam pageParam, boolean isSearchPunish) { if (null == TYPE_PROPER) { TYPE_PROPER = new Properties(); try { // InputStream is = getClass().getClassLoader().getResourceAsStream("searchType.properties"); TYPE_PROPER.load(new InputStreamReader( getClass().getClassLoader().getResourceAsStream("searchType.properties"), "UTF-8")); // TYPE_PROPER.load(is); } catch (IOException e) { e.printStackTrace(); } } List<String> simpleSearch = new ArrayList<String>() { { add("0101000000"); add("0102000000"); add("0107000000"); add("0109000000"); add("0108000000"); add("0120000000"); add("0121000000"); add("0401000000"); add("0110000000"); }//?;?;???;????;????? //???;????; }; List<String> foodSearch = new ArrayList<String>() { { add("0103000000"); add("0104000000"); add("0105000000"); add("0106000000"); }//???;?????;??????;????? }; List<String> discipline = new ArrayList<String>() { { add("0201010000"); add("0202020000"); add("0208070000"); add("0203050000"); add("0204030000"); add("0205040000"); add("0206080000"); add("0207020000"); } }; if ("0111000000".equals(type)) {//?????? return getSeWarterInfos(type, params, pageParam); } else if (foodSearch.contains(type)) {//? return getFoodSearchInfos(type, TYPE_PROPER.getProperty("food_" + type), params, pageParam); } else if (simpleSearch.contains(type)) {//? return getSimplePubsearchInfos(type, params, pageParam); } else if (discipline.contains(type)) {//? return getDisciplineSearchInfos(type, TYPE_PROPER.getProperty("dicipline_" + type), params, pageParam, isSearchPunish); } return null; } /** * * * @Method: getSeWarterInfos * @Method Description: ?????? * @Input parameters:@param type * @Input parameters:@param params * @Input parameters:@param pageParam * @Input parameters:@return * @Return parameters:PagingResult * @Auther:ZhangPan * @Date: 2015-9-29 ?6:38:14 * @Throws: exception * */ public PagingResult getSeWarterInfos(String type, Map<String, String> params, PageParam pageParam) { PagingSrcSql srcSql = new PagingSrcSql(); StringBuffer sqlb = new StringBuffer(); List<Object> values = new ArrayList<Object>(); List<Type> types = new ArrayList<Type>(); sqlb.append(" SELECT " + getFieldNamesByType(type) + " FROM " + getTabNameByType(type) + " WHERE 1=1 "); //???? /*sqlb.append(" AND STATE_RELEASE = ? AND STATE_VALID = ? "); values.add(APP.CIMP_DATAPUBSTATE_ENABLE); values.add(APP.CIMP_DATASTATE_ENABLE); types.add(StringType.INSTANCE); types.add(StringType.INSTANCE);*/ //?????? sqlb.append(" and COMP_TYPE LIKE '0203%'"); //? handleSearchParams(type, params, sqlb, values, types); //? for (String key : params.keySet()) { if (!StrUtils.isNull(params.get(key))) { // if (key.equals("RECORD_DATE")// || key.equals("CLOSED_DATE")// ) { continue; } if (key.endsWith("_BEGIN")) { sqlb.append(" AND " + SqlUtil.toDate(params.get(key), 1, 0) + " <= " + key.substring(0, key.length() - 6)); } else if (key.endsWith("_END")) { sqlb.append(" AND " + SqlUtil.toDate(params.get(key), 1, 0) + " >= " + key.substring(0, key.length() - 4)); } else if (key.endsWith("DATE")) { sqlb.append(" AND " + SqlUtil.toChar(key, 0, 0) + " = ? "); values.add(params.get(key)); types.add(StringType.INSTANCE); } } } srcSql.setSrcSql(sqlb.toString()); srcSql.setTypes(types.toArray(new Type[0])); srcSql.setValues(values.toArray()); return pagingSearch(pageParam, srcSql); } /** * * * @Method: getDisciplineSearchInfos * @Method Description: ? * @Input parameters:@param type * @Input parameters:@param specialtyPrimary ??? * @Input parameters:@param params * @Input parameters:@param pageParam * @Input parameters:@return * @Return parameters:PagingResult * @Auther:ZhangPan * @Date: 2015-9-29 ?6:15:54 * @Throws: exception * */ public PagingResult getDisciplineSearchInfos(String type, String specialtyPrimary, Map<String, String> params, PageParam pageParam, boolean isSearchPunish) { PagingSrcSql srcSql = new PagingSrcSql(); StringBuffer sqlb = new StringBuffer(); List<Object> values = new ArrayList<Object>(); List<Type> types = new ArrayList<Type>(); sqlb.append(" SELECT " + getFieldNamesByType(type)); if (isSearchPunish) { // sqlb.append(", getpunished(DIS_ID) PUNISHED_DESC, getillegal(DIS_ID) FACT_DESC "); } sqlb.append(" , UUID, CREATE_TIME FROM CIMP_ST_DISCIPLINE WHERE 1=1 "); //???? /*sqlb.append(" AND STATE_RELEASE = ? AND STATE_VALID = ? "); values.add(APP.CIMP_DATAPUBSTATE_ENABLE); values.add(APP.CIMP_DATASTATE_ENABLE); types.add(StringType.INSTANCE); types.add(StringType.INSTANCE);*/ //??? sqlb.append(" and SPECIALTY_PRIMARY like ?"); types.add(StringType.INSTANCE); values.add(specialtyPrimary + "%"); //? handleSearchParams(type, params, sqlb, values, types); //? for (String key : params.keySet()) { if (!StrUtils.isNull(params.get(key))) { if (key.endsWith("_BEGIN")) { sqlb.append(" AND " + SqlUtil.toDate(params.get(key), 1, 0) + " <= " + key.substring(0, key.length() - 6)); } else if (key.endsWith("_END")) { sqlb.append(" AND " + SqlUtil.toDate(params.get(key), 1, 0) + " >= " + key.substring(0, key.length() - 4)); } else if (key.endsWith("DATE")) { sqlb.append(" AND " + SqlUtil.toChar(key, 0, 0) + " = ? "); values.add(params.get(key)); types.add(StringType.INSTANCE); } } } srcSql.setSrcSql(sqlb.toString()); srcSql.setTypes(types.toArray(new Type[0])); srcSql.setValues(values.toArray()); return pagingSearch(pageParam, srcSql); } /** * * * @Method: getFoodSearchInfos * @Method Description: ??? * @Input parameters:@param type * @Input parameters:@param produceType * @Input parameters:@param params * @Input parameters:@param pageParam * @Input parameters:@return * @Return parameters:PagingResult * @Auther:ZhangPan * @Date: 2015-9-29 ?10:39:22 * @Throws: exception * */ private PagingResult getFoodSearchInfos(String type, String produceType, Map<String, String> params, PageParam pageParam) { PagingSrcSql srcSql = new PagingSrcSql(); StringBuffer sqlb = new StringBuffer(); List<Object> values = new ArrayList<Object>(); List<Type> types = new ArrayList<Type>(); sqlb.append(" SELECT " + getFieldNamesByType(type) + " FROM " + getTabNameByType(type) + " WHERE 1=1 "); //???? /*sqlb.append(" AND STATE_RELEASE = ? AND STATE_VALID = ? "); values.add(APP.CIMP_DATAPUBSTATE_ENABLE); values.add(APP.CIMP_DATASTATE_ENABLE); types.add(StringType.INSTANCE); types.add(StringType.INSTANCE);*/ //? sqlb.append(" and PRODUCT_TYPE = ?"); types.add(StringType.INSTANCE); values.add(produceType); //? handleSearchParams(type, params, sqlb, values, types); //? for (String key : params.keySet()) { if (!StrUtils.isNull(params.get(key))) { if (key.endsWith("_BEGIN")) { sqlb.append(" AND " + SqlUtil.toDate(params.get(key), 1, 0) + " <= " + key.substring(0, key.length() - 6)); } else if (key.endsWith("_END")) { sqlb.append(" AND " + SqlUtil.toDate(params.get(key), 1, 0) + " >= " + key.substring(0, key.length() - 4)); } else if (key.endsWith("DATE")) { sqlb.append(" AND " + SqlUtil.toChar(key, 0, 0) + " = ? "); values.add(params.get(key)); types.add(StringType.INSTANCE); } } } srcSql.setSrcSql(sqlb.toString()); srcSql.setTypes(types.toArray(new Type[0])); srcSql.setValues(values.toArray()); return pagingSearch(pageParam, srcSql); } /** * * * @Method: getSimplePubsearchInfos * @Method Description: ? * @Input parameters:@param type * @Input parameters:@param params * @Input parameters:@param pageParam * @Input parameters:@return * @Return parameters:PagingResult * @Auther:ZhangPan * @Date: 2015-9-28 ?3:29:28 * @Throws: exception * */ private PagingResult getSimplePubsearchInfos(String type, Map<String, String> params, PageParam pageParam) { PagingSrcSql srcSql = new PagingSrcSql(); StringBuffer sqlb = new StringBuffer(); List<Object> values = new ArrayList<Object>(); List<Type> types = new ArrayList<Type>(); sqlb.append(" SELECT " + getFieldNamesByType(type) + " FROM " + getTabNameByType(type) + " WHERE 1=1 "); //???? /*sqlb.append(" AND STATE_RELEASE = ? AND STATE_VALID = ? "); values.add(APP.CIMP_DATAPUBSTATE_ENABLE); values.add(APP.CIMP_DATASTATE_ENABLE); types.add(StringType.INSTANCE); types.add(StringType.INSTANCE);*/ //? handleSearchParams(type, params, sqlb, values, types); //? for (String key : params.keySet()) { if (!StrUtils.isNull(params.get(key))) { if (key.equals("LICENSEEND_END")) { sqlb.append(" AND LICENSEEND <= ? "); values.add(params.get(key)); types.add(StringType.INSTANCE); continue; } if (key.equals("LICENSESTART_BEGIN")) { sqlb.append(" AND LICENSESTART >= ? "); values.add(params.get(key)); types.add(StringType.INSTANCE); continue; } if (key.endsWith("_BEGIN")) { sqlb.append(" AND " + SqlUtil.toDate(params.get(key), 1, 0) + " <= " + key.substring(0, key.length() - 6)); } else if (key.endsWith("_END")) { sqlb.append(" AND " + SqlUtil.toDate(params.get(key), 1, 0) + " >= " + key.substring(0, key.length() - 4)); } else if (key.endsWith("DATE")) { sqlb.append(" AND " + SqlUtil.toChar(key, 0, 0) + " = ? "); values.add(params.get(key)); types.add(StringType.INSTANCE); } } } srcSql.setSrcSql(sqlb.toString()); srcSql.setTypes(types.toArray(new Type[0])); srcSql.setValues(values.toArray()); return pagingSearch(pageParam, srcSql); } /** * ??, * * * @param params * @param sql * @param values * @param types * @author <a href="mailto:nytclizy@gmail.com">?</a> */ private void handleSearchParams(String type, Map<String, String> params, StringBuffer sql, List<Object> values, List<Type> types) { String[] paramFields = INFOS.get(type)[2]; for (String paramField : paramFields) { if (!StrUtils.isNull(params.get(paramField))) { //?paramField paramField = StringEscapeUtils.escapeSql(paramField); if (isLikeField(paramField)) { sql.append(" AND " + paramField + " like ? "); values.add(params.get(paramField) + "%"); } else { sql.append(" AND " + paramField + " = ? "); values.add(params.get(paramField)); } types.add(StringType.INSTANCE); } } } /** * ??like * * * @param paramField * @return * @author <a href="mailto:nytclizy@gmail.com">?</a> */ private boolean isLikeField(String paramField) { if (StrUtils.isNull(paramField)) { return false; } for (String likeParam : SEARCH_LIKE) { if (likeParam.equals(paramField)) { return true; } } return false; } /** * ???? * * * @param type * @return * @author <a href="mailto:nytclizy@gmail.com">?</a> */ private String getTabNameByType(String type) { return INFOS.get(type)[0][0]; } /** * ???? * * * @param type * @return * @author <a href="mailto:nytclizy@gmail.com">?</a> */ private String getFieldNamesByType(String type) { String ret = " "; String[] fieldNames = INFOS.get(type)[1]; for (String fieldName : fieldNames) { ret += fieldName + ","; } if (ret.endsWith(",")) { ret = ret.substring(0, ret.length() - 1); } return ret; } }