package com.jiuqi.lbsinterface.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import com.jiuqi.lbsinterface.bean.AdminAreaUtilBean;
import com.jiuqi.lbsinterface.bean.MedianBean;
public class AdminAreaSqlUtil {
/**
* 不满足拼接条件,返回null
* <p>
* 所有下级
*
* @param field
* @param v
* @return
*/
public static String getSql(String field, Object v) {
if (null != v && v instanceof Long) {
if (v.equals(0l) || v.equals(0)) {
return null;
}
long area = (Long) v;
while (0 == area % 10) {
area = area / 10;
}
if(String.valueOf(area).length()==1||String.valueOf(area).length()==3||String.valueOf(area).length()==5){
area=(Long)area*10;
}
int pre = ("" + area).length();
if (pre > 9) {
return String.format(" %s=%s ", field, area);
}
return String.format(" LEFT(%s,%s)=%s ", field, pre, area);
}
return null;
}
/**
* 获得直属下级sql
*
* @param field
* @param v
* @return
*/
public static String getDirectlySql(String field, Long v) {
if (null != v && v instanceof Long) {
long area = (Long) v;
if (0 == area) {
area = 0;
} else {
while (0 == area % 10) {
area = area / 10;
}
}
// 2,4,6,9,12
int pre = ("" + area).length();
if (pre > 9) {
return String.format(" %s=%s ", field, area);
} else if (pre > 6) {
return String.format(" (LEFT(%s,%s)=%s) ", field, pre, area);
} else if (pre > 4) {
return String.format(" (LEFT(%s,%s)=%s and %s", field, pre,
area, field) + "%" + 1000 + "=0) ";
} else if (pre > 2) {
return String.format(" (LEFT(%s,%s)=%s and %s", field, pre,
area, field) + "%" + 1000000 + "=0) ";
} else {
return String.format(" (LEFT(%s,%s)=%s and %s", field, pre,
area, field) + "%" + 100000000 + "=0) ";
}
}
return null;
}
/**
* 内部车辆分布专用(用的时候详细看内容 谨慎使用)
*
* @auth lizh
* @Date 2013-9-16上午11:08:54
* @method getSql
* @fileName AdminAreaSqlUtil
* @package com.jiuqi.mobile.nigo.biz.core.util
* @project snigo
* @param field
* @param v
* @return
* @return String
*/
public static MedianBean getMoreCodeSql(String field,
List<AdminAreaUtilBean> v) {
StringBuilder builder = new StringBuilder();
MedianBean median = new MedianBean();
Map<Integer, List<Long>> map = new HashMap<Integer, List<Long>>();
for (AdminAreaUtilBean bean : v) {
Long o = bean.getCode();
if (null != o && o instanceof Long) {
if (o.equals(0l) || o.equals(0)) {
return null;
}
long area = (Long) o;
while (0 == area % 10) {
area = area / 10;
}
int pre = ("" + area).length();
if (map.containsKey(pre)) {
map.get(pre).add(area);
} else {
List<Long> list = new ArrayList<Long>();
list.add(area);
map.put(pre, list);
}
bean.setCodeMedian(area);
}
}
builder.append("(");
SortedMap<Integer, Integer> treeMap = new TreeMap<Integer, Integer>();
for (Map.Entry<Integer, List<Long>> entry : map.entrySet()) {
int key = entry.getKey();
List<Long> list = entry.getValue();
treeMap.put(list.size(), key);
if (key > 9) {
if (!"(".equals(builder.toString()))
builder.append(" or ");
builder.append(field);
builder.append(" in ");
builder.append("(");
for (int i = 0; i < list.size(); i++) {
builder.append("'");
builder.append(list.get(i));
builder.append("'");
if (i != list.size() - 1)
builder.append(",");
}
builder.append(") ");
} else {
if (!"(".equals(builder.toString()))
builder.append(" or ");
builder.append(" LEFT(");
builder.append(field);
builder.append(",");
builder.append(key);
builder.append(")");
builder.append(" in ");
builder.append("(");
for (int i = 0; i < list.size(); i++) {
builder.append("'");
builder.append(list.get(i));
builder.append("'");
if (i != list.size() - 1)
builder.append(",");
}
builder.append(") ");
}
}
// 如果有多种移位 选取移位最多的一个
int key = treeMap.get(treeMap.lastKey());
if (key > 9)
median.setMedianFiled(field);
else
median.setMedianFiled(" LEFT(" + field + "," + key + ")");
builder.append(")");
median.setSql(builder.toString());
return median;
}
public static void main(String[] args) {
List<Object> list = new ArrayList<Object>();
list.add(110000000000l);
// list.add(360000000000l);
// list.add(310000000000l);
// list.add(111100000000l);
// list.add(111122000000l);
// list.add(111122222000l);
// list.add(111122222123l);
System.out.println(getSql("aa", 110000000000l));
}
}