|
@ -133,6 +133,40 @@ public class StatisticsService extends BaseService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public long getWeiJiaoFei(String endDate,String area,int level){
|
|
|
|
// 查询语句
|
|
|
|
String sql = " select " +
|
|
|
|
" ifnull(result,'0') amount" +
|
|
|
|
" from " +
|
|
|
|
" wlyy_quota_result " +
|
|
|
|
" where " +
|
|
|
|
" quato_code = '14' " +
|
|
|
|
" and level1_type = ? and del = '1'" +
|
|
|
|
" and level2_type = '0' " +
|
|
|
|
" and quota_date = ? ";
|
|
|
|
|
|
|
|
if (level == 4) {
|
|
|
|
// 市级别
|
|
|
|
sql += " and city = ? ";
|
|
|
|
} else if (level == 3) {
|
|
|
|
// 区、城镇级别
|
|
|
|
sql += " and town = ? ";
|
|
|
|
} else if (level == 2) {
|
|
|
|
// 机构级别
|
|
|
|
sql += " and org_code = ? ";
|
|
|
|
} else if (level == 1) {
|
|
|
|
sql += " and qkdoctor_code = ?";
|
|
|
|
}
|
|
|
|
|
|
|
|
List<Map<String,Object>> result = jdbcTemplate.queryForList(sql, new Object[]{level, endDate, area});
|
|
|
|
|
|
|
|
if (result != null && result.size() > 0) {
|
|
|
|
return (result.get(0).get("amount") != null ? Long.valueOf(result.get(0).get("amount").toString()) : 0);
|
|
|
|
} else {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 查询截止某个日期累计签约率
|
|
* 查询截止某个日期累计签约率
|
|
*
|
|
*
|
|
@ -506,21 +540,20 @@ public class StatisticsService extends BaseService {
|
|
map.put("amount", (long) map.get("amount") + valJson.getInt("num"));
|
|
map.put("amount", (long) map.get("amount") + valJson.getInt("num"));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!low_level.equals("1")) {
|
|
|
|
String redisNum = redisTemplate.opsForValue().get("people:num:" + map.get("code").toString());
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(redisNum)) {
|
|
|
|
PopulationBase peopleNum = peopleNumDao.findByCodeAndYear(map.get("code").toString(), Calendar.getInstance().get(Calendar.YEAR));
|
|
|
|
if (peopleNum != null) {
|
|
|
|
map.put("rate", df.format(((long) map.get("amount") * 1.0000) / peopleNum.getNum() * 100));
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
JSONObject peopleNum = new JSONObject(redisNum);
|
|
|
|
if (peopleNum != null) {
|
|
|
|
map.put("rate", df.format(((long) map.get("amount") * 1.0000) / peopleNum.getInt("num") * 100));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
if (!low_level.equals("1")) {
|
|
|
|
String redisNum = redisTemplate.opsForValue().get("people:num:" + map.get("code").toString());
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(redisNum)) {
|
|
|
|
PopulationBase peopleNum = peopleNumDao.findByCodeAndYear(map.get("code").toString(), Calendar.getInstance().get(Calendar.YEAR));
|
|
|
|
if (peopleNum != null) {
|
|
|
|
map.put("rate", df.format(((long) map.get("amount") * 1.0000) / peopleNum.getNum() * 100));
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
JSONObject peopleNum = new JSONObject(redisNum);
|
|
|
|
if (peopleNum != null) {
|
|
|
|
map.put("rate", df.format(((long) map.get("amount") * 1.0000) / peopleNum.getInt("num") * 100));
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@ -1655,4 +1688,605 @@ public class StatisticsService extends BaseService {
|
|
|
|
|
|
return total;
|
|
return total;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 查询某个级别的某个指标到达量
|
|
|
|
*
|
|
|
|
* @param date
|
|
|
|
* @param area
|
|
|
|
* @param level
|
|
|
|
* @param index
|
|
|
|
* @param sort
|
|
|
|
* @param lowLevel
|
|
|
|
* @return
|
|
|
|
* @throws Exception
|
|
|
|
*/
|
|
|
|
public JSONArray getLowLevelTotal(String date, String area, int level, String index, int sort, String lowLevel) throws Exception {
|
|
|
|
String areaField = "";
|
|
|
|
String lowLevelField = "";
|
|
|
|
String lowLevelName = "";
|
|
|
|
|
|
|
|
if (level == 4) {
|
|
|
|
// 市级别
|
|
|
|
areaField = "city";
|
|
|
|
lowLevelField = "town";
|
|
|
|
lowLevelName = "town_name";
|
|
|
|
} else if (level == 3) {
|
|
|
|
// 区、城镇级别
|
|
|
|
areaField = "town";
|
|
|
|
lowLevelField = "org_code";
|
|
|
|
lowLevelName = "org_name";
|
|
|
|
} else if (level == 2) {
|
|
|
|
// 机构级别
|
|
|
|
areaField = "org_code";
|
|
|
|
lowLevelField = "qkdoctor_code";
|
|
|
|
lowLevelName = "qkdoctor_name";
|
|
|
|
} else if (level == 1) {
|
|
|
|
throw new Exception("param level error");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!StringUtils.isEmpty(lowLevel)) {
|
|
|
|
if (lowLevel.equals("3")) {
|
|
|
|
lowLevelField = "town";
|
|
|
|
lowLevelName = "town_name";
|
|
|
|
} else if (lowLevel.equals("2")) {
|
|
|
|
lowLevelField = "org_code";
|
|
|
|
lowLevelName = "org_name";
|
|
|
|
} else if (lowLevel.equals("1")) {
|
|
|
|
lowLevelField = "qkdoctor_code";
|
|
|
|
lowLevelName = "qkdoctor_name";
|
|
|
|
} else {
|
|
|
|
throw new Exception("param lowLevel error");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
String low_level = String.valueOf(StringUtils.isEmpty(lowLevel) ? (level - 1) : lowLevel);
|
|
|
|
|
|
|
|
// 查询语句
|
|
|
|
String sql = " select " +
|
|
|
|
" ifnull(" + lowLevelField + ",'') code " +
|
|
|
|
" ,ifnull(" + lowLevelName + ",'') 'name' " +
|
|
|
|
" ,ifnull(result,'0') amount" +
|
|
|
|
" from " +
|
|
|
|
" wlyy_quota_result " +
|
|
|
|
" where " +
|
|
|
|
" quato_code = '" + index + "' " +
|
|
|
|
" and level1_type = ? and del = '1'" +
|
|
|
|
" and quota_date = ? " +
|
|
|
|
" and " + areaField + " = ? ";
|
|
|
|
|
|
|
|
if (sort == 1) {
|
|
|
|
sql += " order by amount desc";
|
|
|
|
} else {
|
|
|
|
sql += " order by amount asc ";
|
|
|
|
}
|
|
|
|
|
|
|
|
List<Map<String, Object>> resultList = jdbcTemplate.queryForList(sql, new Object[]{low_level, date, area});
|
|
|
|
|
|
|
|
if (resultList != null) {
|
|
|
|
DecimalFormat df = new DecimalFormat("0.0000");
|
|
|
|
for (Map<String, Object> map : resultList) {
|
|
|
|
map.put("amount", map.get("amount") != null ? Long.valueOf(map.get("amount").toString()) : 0);
|
|
|
|
|
|
|
|
if (!low_level.equals("1")) {
|
|
|
|
String redisNum = redisTemplate.opsForValue().get("people:num:" + map.get("code").toString());
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(redisNum)) {
|
|
|
|
PopulationBase peopleNum = peopleNumDao.findByCodeAndYear(map.get("code").toString(), Calendar.getInstance().get(Calendar.YEAR));
|
|
|
|
if (peopleNum != null) {
|
|
|
|
map.put("rate", df.format(((long) map.get("amount") * 1.0000) / peopleNum.getNum() * 100));
|
|
|
|
map.put("num", peopleNum.getNum());
|
|
|
|
map.put("task", peopleNum.getTaskNum());
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
JSONObject peopleNum = new JSONObject(redisNum);
|
|
|
|
if (peopleNum != null) {
|
|
|
|
map.put("rate", df.format(((long) map.get("amount") * 1.0000) / peopleNum.getInt("num") * 100));
|
|
|
|
map.put("num", peopleNum.getInt("num"));
|
|
|
|
map.put("task", peopleNum.getInt("taskNum"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Collections.sort(resultList, new Comparator<Map<String, Object>>() {
|
|
|
|
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
|
|
|
|
long map1value = (long) o1.get("amount");
|
|
|
|
long map2value = (long) o2.get("amount");
|
|
|
|
|
|
|
|
if (map1value - map2value > 0) {
|
|
|
|
return sort == 1 ? -1 : 1;
|
|
|
|
} else if (map1value - map2value < 0) {
|
|
|
|
return sort == 1 ? 1 : -1;
|
|
|
|
} else {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return new JSONArray(resultList);
|
|
|
|
} else {
|
|
|
|
return new JSONArray();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 查询某个日期范围内的某个指标每天到达量
|
|
|
|
*
|
|
|
|
* @param startDate
|
|
|
|
* @param endDate
|
|
|
|
* @param interval
|
|
|
|
* @param area
|
|
|
|
* @param level
|
|
|
|
* @param index
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public JSONObject getDateTotal(String startDate, String endDate, int interval, String area, int level, String index) throws Exception {
|
|
|
|
int taskNum = 0;
|
|
|
|
JSONObject json = new JSONObject();
|
|
|
|
|
|
|
|
if (level > 1) {
|
|
|
|
String redisNum = redisTemplate.opsForValue().get("people:num:" + area);
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(redisNum)) {
|
|
|
|
PopulationBase peopleNum = peopleNumDao.findByCodeAndYear(area, Calendar.getInstance().get(Calendar.YEAR));
|
|
|
|
if (peopleNum != null) {
|
|
|
|
taskNum = peopleNum.getTaskNum();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
JSONObject peopleNum = new JSONObject(redisNum);
|
|
|
|
if (peopleNum != null) {
|
|
|
|
taskNum = peopleNum.getInt("taskNum");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
json.put("taskNum",taskNum);
|
|
|
|
|
|
|
|
if (interval == 1) {
|
|
|
|
JSONArray jsonArray = dateTotalStatistics(startDate, endDate, area, level, index);
|
|
|
|
json.put("data",jsonArray);
|
|
|
|
return json;
|
|
|
|
} else if (interval == 2) {
|
|
|
|
JSONArray jsonArray = weekTotalStatistics(startDate, endDate, area, level, index);
|
|
|
|
json.put("data",jsonArray);
|
|
|
|
return json;
|
|
|
|
} else if(interval == 3){
|
|
|
|
JSONArray jsonArray = monthTotalStatistics(startDate, endDate, area, level, index);
|
|
|
|
json.put("data",jsonArray);
|
|
|
|
return json;
|
|
|
|
}
|
|
|
|
|
|
|
|
return json;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param startDate
|
|
|
|
* @param endDate
|
|
|
|
* @param area
|
|
|
|
* @param level
|
|
|
|
* @param index
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public JSONArray dateTotalStatistics(String startDate, String endDate, String area, int level, String index) {
|
|
|
|
String areaField = "";
|
|
|
|
String sql = "";
|
|
|
|
|
|
|
|
if (level == 4) {
|
|
|
|
// 市级别
|
|
|
|
areaField = "city";
|
|
|
|
} else if (level == 3) {
|
|
|
|
// 区、城镇级别
|
|
|
|
areaField = "town";
|
|
|
|
} else if (level == 2) {
|
|
|
|
// 机构级别
|
|
|
|
areaField = "org_code";
|
|
|
|
} else if (level == 1) {
|
|
|
|
// 机构级别
|
|
|
|
areaField = "qkdoctor_code";
|
|
|
|
}
|
|
|
|
|
|
|
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
// 起始日期
|
|
|
|
Calendar start = Calendar.getInstance();
|
|
|
|
start.setTime(DateUtil.strToDate(startDate, DateUtil.YYYY_MM_DD));
|
|
|
|
//结束日期
|
|
|
|
Calendar end = Calendar.getInstance();
|
|
|
|
end.setTime(DateUtil.strToDate(endDate, DateUtil.YYYY_MM_DD));
|
|
|
|
// 日期集合
|
|
|
|
List<Calendar> days = new ArrayList<>();
|
|
|
|
days.add(start);
|
|
|
|
|
|
|
|
boolean flag = true;
|
|
|
|
|
|
|
|
if (startDate.compareTo(endDate) == 0) {
|
|
|
|
flag = false;
|
|
|
|
}
|
|
|
|
// 计算统计日期
|
|
|
|
while (flag) {
|
|
|
|
Calendar next = Calendar.getInstance();
|
|
|
|
next.setTime(days.get(days.size() - 1).getTime());
|
|
|
|
next.add(Calendar.DATE, 1);
|
|
|
|
if (df.format(next.getTime()).compareTo(endDate) < 0) {
|
|
|
|
days.add(next);
|
|
|
|
} else {
|
|
|
|
days.add(end);
|
|
|
|
flag = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, JSONObject> countResult = new HashMap<>();
|
|
|
|
|
|
|
|
// 统计预计构建
|
|
|
|
for (int i = 0; i < days.size(); i++) {
|
|
|
|
String startStr = "";
|
|
|
|
long amount = 0;
|
|
|
|
|
|
|
|
startStr = df.format(days.get(i).getTime());
|
|
|
|
JSONObject range = new JSONObject();
|
|
|
|
range.put("range", startStr);
|
|
|
|
range.put("amount", amount);
|
|
|
|
countResult.put(startStr, range);
|
|
|
|
}
|
|
|
|
|
|
|
|
sql = " select " +
|
|
|
|
" ifnull(quota_date,'') as 'range' " +
|
|
|
|
" ,ifnull(result,'0') amount " +
|
|
|
|
" from " +
|
|
|
|
" wlyy_quota_result " +
|
|
|
|
" where " +
|
|
|
|
" quato_code = '" + index + "' " +
|
|
|
|
" and level1_type = '" + level + "' and del = '1' " +
|
|
|
|
" and quota_date >= '" + startDate + "' " +
|
|
|
|
" and quota_date <= '" + endDate + "' " +
|
|
|
|
" and " + areaField + " = '" + area + "' ";
|
|
|
|
|
|
|
|
List<Map<String, Object>> resultList = jdbcTemplate.queryForList(sql);
|
|
|
|
|
|
|
|
if (resultList != null) {
|
|
|
|
for (Map<String, Object> map : resultList) {
|
|
|
|
if (countResult.containsKey(map.get("range").toString())) {
|
|
|
|
JSONObject range = (JSONObject) countResult.get(map.get("range").toString());
|
|
|
|
long amount = range.getLong("amount");
|
|
|
|
long resultAmount = map.get("amount") != null ? Long.valueOf(map.get("amount").toString()) : 0L;
|
|
|
|
range.put("amount", amount + resultAmount);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
List<JSONObject> result = new ArrayList<>(countResult.values());
|
|
|
|
|
|
|
|
result.sort(new Comparator<JSONObject>() {
|
|
|
|
@Override
|
|
|
|
public int compare(JSONObject o1, JSONObject o2) {
|
|
|
|
if (o1.getString("range").compareTo(o2.getString("range")) > 0) {
|
|
|
|
return 1;
|
|
|
|
} else if (o1.getString("range").compareTo(o2.getString("range")) < 0) {
|
|
|
|
return -1;
|
|
|
|
} else {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return new JSONArray(result);
|
|
|
|
} else {
|
|
|
|
return new JSONArray();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 按周统计
|
|
|
|
*
|
|
|
|
* @param startDate
|
|
|
|
* @param endDate
|
|
|
|
* @param area
|
|
|
|
* @param level
|
|
|
|
* @param index
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
private JSONArray weekTotalStatistics(String startDate, String endDate, String area, int level, String index) throws Exception {
|
|
|
|
String areaField = "";
|
|
|
|
String sql = "";
|
|
|
|
|
|
|
|
if (level == 4) {
|
|
|
|
// 市级别
|
|
|
|
areaField = "city";
|
|
|
|
} else if (level == 3) {
|
|
|
|
// 区、城镇级别
|
|
|
|
areaField = "town";
|
|
|
|
} else if (level == 2) {
|
|
|
|
// 机构级别
|
|
|
|
areaField = "org_code";
|
|
|
|
} else if (level == 1) {
|
|
|
|
// 机构级别
|
|
|
|
areaField = "qkdoctor_code";
|
|
|
|
}
|
|
|
|
|
|
|
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
// 起始日期
|
|
|
|
Calendar start = Calendar.getInstance();
|
|
|
|
start.setTime(DateUtil.strToDate(startDate, DateUtil.YYYY_MM_DD));
|
|
|
|
// 第一个统计周期结束日期
|
|
|
|
String firstEnd = "";
|
|
|
|
// 结束日期
|
|
|
|
Calendar end = Calendar.getInstance();
|
|
|
|
end.setTime(DateUtil.strToDate(endDate, DateUtil.YYYY_MM_DD));
|
|
|
|
// 起始日期为周几
|
|
|
|
int week = start.get(Calendar.DAY_OF_WEEK);
|
|
|
|
int incre = 7 - week + 1;
|
|
|
|
|
|
|
|
// 日期集合
|
|
|
|
List<Calendar> days = new ArrayList<>();
|
|
|
|
days.add(start);
|
|
|
|
boolean flag = true;
|
|
|
|
int i = 0;
|
|
|
|
|
|
|
|
if (startDate.compareTo(endDate) == 0) {
|
|
|
|
flag = false;
|
|
|
|
days.add(end);
|
|
|
|
firstEnd = df.format(end.getTime());
|
|
|
|
}
|
|
|
|
|
|
|
|
// 计算统计日期
|
|
|
|
while (flag) {
|
|
|
|
Calendar next = Calendar.getInstance();
|
|
|
|
next.setTime(days.get(days.size() - 1).getTime());
|
|
|
|
|
|
|
|
if (i == 0) {
|
|
|
|
if (incre != 7) {
|
|
|
|
next.add(Calendar.DATE, incre);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
next.add(Calendar.DATE, 7);
|
|
|
|
}
|
|
|
|
if (df.format(next.getTime()).compareTo(df.format(end.getTime())) < 0) {
|
|
|
|
days.add(next);
|
|
|
|
if (i == 0) {
|
|
|
|
firstEnd = df.format(next.getTime());
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
days.add(end);
|
|
|
|
flag = false;
|
|
|
|
if (i == 0) {
|
|
|
|
firstEnd = df.format(end.getTime());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
|
|
|
|
// 结果集
|
|
|
|
Map<String, JSONObject> countResult = new HashMap<>();
|
|
|
|
|
|
|
|
// 算出每个查询周期
|
|
|
|
for (int j = 0; j < days.size() - 1; j++) {
|
|
|
|
String startStr = "";
|
|
|
|
String endStr = df.format(days.get(j + 1).getTime());
|
|
|
|
long amount = 0;
|
|
|
|
|
|
|
|
// 起始、截止日期
|
|
|
|
if (j == 0) {
|
|
|
|
startStr = df.format(days.get(j).getTime());
|
|
|
|
} else {
|
|
|
|
Calendar cal = Calendar.getInstance();
|
|
|
|
cal.setTime(days.get(j).getTime());
|
|
|
|
cal.add(Calendar.DATE, 1);
|
|
|
|
startStr = df.format(cal.getTime());
|
|
|
|
}
|
|
|
|
|
|
|
|
JSONObject range = new JSONObject();
|
|
|
|
|
|
|
|
range.put("range", endStr);
|
|
|
|
range.put("amount", amount);
|
|
|
|
|
|
|
|
countResult.put(endStr, range);
|
|
|
|
}
|
|
|
|
|
|
|
|
// 查询时间范围内所有记录
|
|
|
|
sql = " select " +
|
|
|
|
" ifnull(quota_date,'') as 'range' " +
|
|
|
|
" ,ifnull(result,'0') amount " +
|
|
|
|
" from " +
|
|
|
|
" wlyy_quota_result " +
|
|
|
|
" where " +
|
|
|
|
" quato_code = '" + index + "' " +
|
|
|
|
" and level1_type = '" + level + "' and del = '1' " +
|
|
|
|
" and quota_date >= '" + startDate + "' " +
|
|
|
|
" and quota_date <= '" + endDate + "' " +
|
|
|
|
" and " + areaField + " = '" + area + "' ";
|
|
|
|
|
|
|
|
List<Map<String, Object>> resultList = jdbcTemplate.queryForList(sql);
|
|
|
|
|
|
|
|
if (resultList != null) {
|
|
|
|
// 计算结果
|
|
|
|
for (Map<String, Object> map : resultList) {
|
|
|
|
String range = map.get("range").toString();
|
|
|
|
JSONObject json = countResult.get(range);
|
|
|
|
|
|
|
|
if(json != null) {
|
|
|
|
long amount = map.get("amount") == null ? 0L : Long.valueOf(map.get("amount").toString());
|
|
|
|
json.put("amount",amount);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
List<JSONObject> result = new ArrayList<>(countResult.values());
|
|
|
|
|
|
|
|
// 排序
|
|
|
|
result.sort(new Comparator<JSONObject>() {
|
|
|
|
@Override
|
|
|
|
public int compare(JSONObject o1, JSONObject o2) {
|
|
|
|
if (o1.getString("range").compareTo(o2.getString("range")) > 0) {
|
|
|
|
return 1;
|
|
|
|
} else if (o1.getString("range").compareTo(o2.getString("range")) < 0) {
|
|
|
|
return -1;
|
|
|
|
} else {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return new JSONArray(result);
|
|
|
|
} else {
|
|
|
|
return new JSONArray();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 按月统计
|
|
|
|
*
|
|
|
|
* @param startDate
|
|
|
|
* @param endDate
|
|
|
|
* @param area
|
|
|
|
* @param level
|
|
|
|
* @param index
|
|
|
|
* @return
|
|
|
|
* @throws Exception
|
|
|
|
*/
|
|
|
|
private JSONArray monthTotalStatistics(String startDate, String endDate, String area, int level, String index) throws Exception {
|
|
|
|
String areaField = "";
|
|
|
|
String sql = "";
|
|
|
|
|
|
|
|
if (level == 4) {
|
|
|
|
// 市级别
|
|
|
|
areaField = "city";
|
|
|
|
} else if (level == 3) {
|
|
|
|
// 区、城镇级别
|
|
|
|
areaField = "town";
|
|
|
|
} else if (level == 2) {
|
|
|
|
// 机构级别
|
|
|
|
areaField = "org_code";
|
|
|
|
} else if (level == 1) {
|
|
|
|
// 机构级别
|
|
|
|
areaField = "qkdoctor_code";
|
|
|
|
}
|
|
|
|
|
|
|
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
// 起始日期
|
|
|
|
Calendar start = Calendar.getInstance();
|
|
|
|
start.setTime(DateUtil.strToDate(startDate, DateUtil.YYYY_MM_DD));
|
|
|
|
// 结束日期
|
|
|
|
Calendar end = Calendar.getInstance();
|
|
|
|
end.setTime(DateUtil.strToDate(endDate, DateUtil.YYYY_MM_DD));
|
|
|
|
// 第一个结束日期
|
|
|
|
String firstEnd = "";
|
|
|
|
|
|
|
|
// 日期集合
|
|
|
|
List<Calendar> days = new ArrayList<>();
|
|
|
|
days.add(start);
|
|
|
|
|
|
|
|
boolean flag = true;
|
|
|
|
int k = 0;
|
|
|
|
|
|
|
|
if (startDate.compareTo(endDate) == 0) {
|
|
|
|
flag = false;
|
|
|
|
days.add(end);
|
|
|
|
firstEnd = df.format(end.getTime());
|
|
|
|
}
|
|
|
|
|
|
|
|
// 统计日期计算
|
|
|
|
while (flag) {
|
|
|
|
Calendar next = Calendar.getInstance();
|
|
|
|
|
|
|
|
next.setTime(days.get(days.size() - 1).getTime());
|
|
|
|
if (k == 0) {
|
|
|
|
next.add(Calendar.MONTH, 1);
|
|
|
|
} else {
|
|
|
|
next.add(Calendar.MONTH, 2);
|
|
|
|
}
|
|
|
|
next.set(Calendar.DAY_OF_MONTH, 1);
|
|
|
|
next.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
|
|
|
|
|
if (df.format(next.getTime()).compareTo(df.format(end.getTime())) < 0) {
|
|
|
|
days.add(next);
|
|
|
|
if (k == 0) {
|
|
|
|
firstEnd = df.format(next.getTime());
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
days.add(end);
|
|
|
|
flag = false;
|
|
|
|
if (k == 0) {
|
|
|
|
firstEnd = df.format(end.getTime());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
k++;
|
|
|
|
}
|
|
|
|
|
|
|
|
// 统计结果
|
|
|
|
Map<String, JSONObject> countResult = new HashMap<>();
|
|
|
|
|
|
|
|
for (int i = 0; i < days.size() - 1; i++) {
|
|
|
|
String startStr = "";
|
|
|
|
String endStr = df.format(days.get(i + 1).getTime());
|
|
|
|
int amount = 0;
|
|
|
|
|
|
|
|
// 起始时间计算
|
|
|
|
if (i == 0) {
|
|
|
|
startStr = df.format(days.get(i).getTime());
|
|
|
|
} else {
|
|
|
|
Calendar cal = Calendar.getInstance();
|
|
|
|
cal.setTime(days.get(i).getTime());
|
|
|
|
cal.add(Calendar.DATE, 1);
|
|
|
|
startStr = df.format(cal.getTime());
|
|
|
|
}
|
|
|
|
|
|
|
|
JSONObject range = new JSONObject();
|
|
|
|
|
|
|
|
range.put("range", endStr);
|
|
|
|
range.put("amount", amount);
|
|
|
|
|
|
|
|
countResult.put(endStr, range);
|
|
|
|
}
|
|
|
|
|
|
|
|
// 查询时间范围内所有记录
|
|
|
|
sql = " select " +
|
|
|
|
" ifnull(quota_date,'') as 'range' " +
|
|
|
|
" ,ifnull(result,'0') amount " +
|
|
|
|
" from " +
|
|
|
|
" wlyy_quota_result " +
|
|
|
|
" where " +
|
|
|
|
" quato_code = '" + index + "' " +
|
|
|
|
" and level1_type = '" + level + "' and del = '1' " +
|
|
|
|
" and quota_date >= '" + startDate + "' " +
|
|
|
|
" and quota_date <= '" + endDate + "' " +
|
|
|
|
" and " + areaField + " = '" + area + "' ";
|
|
|
|
|
|
|
|
List<Map<String, Object>> resultList = jdbcTemplate.queryForList(sql);
|
|
|
|
|
|
|
|
if (resultList != null) {
|
|
|
|
// 计算结果
|
|
|
|
for (Map<String, Object> map : resultList) {
|
|
|
|
String range = map.get("range").toString();
|
|
|
|
JSONObject json = countResult.get(range);
|
|
|
|
|
|
|
|
if(json != null) {
|
|
|
|
long amount = map.get("amount") == null ? 0L : Long.valueOf(map.get("amount").toString());
|
|
|
|
json.put("amount",amount);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
List<JSONObject> result = new ArrayList<>(countResult.values());
|
|
|
|
|
|
|
|
// 排序
|
|
|
|
result.sort(new Comparator<JSONObject>() {
|
|
|
|
@Override
|
|
|
|
public int compare(JSONObject o1, JSONObject o2) {
|
|
|
|
if (o1.getString("range").compareTo(o2.getString("range")) > 0) {
|
|
|
|
return 1;
|
|
|
|
} else if (o1.getString("range").compareTo(o2.getString("range")) < 0) {
|
|
|
|
return -1;
|
|
|
|
} else {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return new JSONArray(result);
|
|
|
|
} else {
|
|
|
|
return new JSONArray();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
}
|