|
@ -57,6 +57,7 @@ public class StatisticsESService {
|
|
private SystemDictService systemDictService;
|
|
private SystemDictService systemDictService;
|
|
|
|
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX");
|
|
/**
|
|
/**
|
|
* 获取上次统计时间
|
|
* 获取上次统计时间
|
|
*
|
|
*
|
|
@ -1927,4 +1928,192 @@ public class StatisticsESService {
|
|
|
|
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public JSONObject getRenewAnalysis(String switchIndex, String switchIndexReson, String signIn, String signOut, String level, String code) throws Exception{
|
|
|
|
|
|
|
|
JSONObject jo = new JSONObject();
|
|
|
|
//获取统计的最新事件
|
|
|
|
String quotaDate = elasticsearchUtil.getQuotaTime();
|
|
|
|
|
|
|
|
//获取转签人数
|
|
|
|
int switchNum = getLevel1NumForRedis(switchIndex, level, code, quotaDate);
|
|
|
|
//获取转签分布
|
|
|
|
JSONArray switchJO = getLevel2JsonObjectForRedis(switchIndexReson, level, code, quotaDate);
|
|
|
|
//获取签入人数
|
|
|
|
int inNum = getLevel1NumForRedis(signIn, level, code, quotaDate);
|
|
|
|
//获取签出人数
|
|
|
|
int outNum = getLevel1NumForRedis(signOut, level, code, quotaDate);
|
|
|
|
|
|
|
|
int changeTeam = getLevel1NumForRedis("31", level, code, quotaDate);//夸团队的数目
|
|
|
|
int changeHospital = getLevel1NumForRedis("32", level, code, quotaDate);//夸社区的数目
|
|
|
|
int changeTown = getLevel1NumForRedis("33", level, code, quotaDate);//夸社区的数目
|
|
|
|
int allChangeCount = changeTeam + changeHospital + changeTown; //跨团队,跨社区 跨区的分母
|
|
|
|
|
|
|
|
jo.put("inNum", inNum);//今年的签入量
|
|
|
|
jo.put("outNum", outNum);//今年的签出量
|
|
|
|
jo.put("thisYearSwithch", switchNum);//今年的转签量
|
|
|
|
jo.put("switchHealth", switchJO);//今年的服务分布
|
|
|
|
String changeTeamNum = getRangeNoLast(changeTeam, allChangeCount, 2);//跨团队转签率
|
|
|
|
String changeHospNum = getRangeNoLast(changeHospital, allChangeCount, 2);//跨社区转签率
|
|
|
|
String changeTownNum = "";
|
|
|
|
//保留两位小数
|
|
|
|
DecimalFormat df = new DecimalFormat("######0.00");
|
|
|
|
if (changeTown == 0) {
|
|
|
|
changeTownNum = "0";
|
|
|
|
} else {
|
|
|
|
changeTownNum = df.format(100 - Double.valueOf(changeTeamNum) - Double.valueOf(changeHospNum)) + "";//跨区转签率,解决算出来可能不是100%的问题 用扣的
|
|
|
|
}
|
|
|
|
jo.put("switchTeam", changeTeamNum + "%");//今年的转签量
|
|
|
|
jo.put("switchHospital", changeHospNum + "%");//今年的转签量
|
|
|
|
jo.put("switchTown", changeTownNum + "%");//今年的转签量
|
|
|
|
return jo;
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* 通用的方法 获取一级维度的数据
|
|
|
|
*
|
|
|
|
* @param index
|
|
|
|
* @param level
|
|
|
|
* @param code
|
|
|
|
* @param timeKey
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
private int getLevel1NumForRedis(String index, String level, String code, String timeKey) throws Exception{
|
|
|
|
|
|
|
|
SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel0(timeKey,code,Integer.parseInt(level),index,"2");
|
|
|
|
return saveModel.getResult2();
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* 通用的方法 获取二级维度的数据列表
|
|
|
|
*
|
|
|
|
* @param index
|
|
|
|
* @param level
|
|
|
|
* @param code
|
|
|
|
* @param timeKey
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
private JSONArray getLevel2JsonObjectForRedis(String index, String level, String code, String timeKey) throws Exception{
|
|
|
|
List<SaveModel> list = elasticsearchUtil.findOneDateQuotaLevel1(timeKey,code,Integer.parseInt(level),index,"2");
|
|
|
|
// JSONObject jo = new JSONObject();
|
|
|
|
JSONArray switchJo = new JSONArray();
|
|
|
|
list.stream().forEach(one->{
|
|
|
|
Map<String,Object> map = new HashMap<>();
|
|
|
|
map.put("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(one.getQuotaDate()));
|
|
|
|
if (SaveModel.teamLevel.equals(level)) {
|
|
|
|
map.put("code",one.getTeam());
|
|
|
|
map.put("name",one.getTeamName());
|
|
|
|
} else if (SaveModel.OrgLevel.equals(level)) {
|
|
|
|
map.put("code",one.getHospital());
|
|
|
|
map.put("name",one.getHospitalName());
|
|
|
|
} else if (SaveModel.townLevel.equals(level)) {
|
|
|
|
map.put("code",one.getTown());
|
|
|
|
map.put("name",one.getTownName());
|
|
|
|
} else if (SaveModel.cityLevel.equals(level)) {
|
|
|
|
map.put("code",one.getCity());
|
|
|
|
map.put("name",one.getCityName());
|
|
|
|
}
|
|
|
|
map.put("num",one.getResult2());
|
|
|
|
switchJo.put(map);
|
|
|
|
});
|
|
|
|
return switchJo;
|
|
|
|
}
|
|
|
|
public String getRangeNoLast(int first, int second, int i) {
|
|
|
|
if (second == 0 && first > 0) {
|
|
|
|
return "100";
|
|
|
|
} else if (second == 0 && first == 0) {
|
|
|
|
return "0";
|
|
|
|
}
|
|
|
|
float size = (float) (first * 100) / second;
|
|
|
|
DecimalFormat df = new DecimalFormat("0.00");//格式化小数,不足的补0
|
|
|
|
String filesize = df.format(size);
|
|
|
|
return filesize;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 查询某个级别的某个指标到达量(单条记录)
|
|
|
|
*
|
|
|
|
* @param date
|
|
|
|
* @param area
|
|
|
|
* @param level
|
|
|
|
* @return
|
|
|
|
* @throws Exception
|
|
|
|
*/
|
|
|
|
public JSONObject getLowLevelTotalSingle2(String date, String area, int level) throws Exception {
|
|
|
|
// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
//获取微信关注的未交费
|
|
|
|
// Map<String, Object> expenseStatus0 = getByIndexSingle(date, area, level, "49",dateFormat);
|
|
|
|
SaveModel expenseStatus0 = elasticsearchUtil.findOneDateQuotaLevel0(date,area,level,"49","2");
|
|
|
|
//获取微信关注的已交费
|
|
|
|
// Map<String, Object> expenseStatus1 = getByIndexSingle(date, area, level, "50",dateFormat);
|
|
|
|
SaveModel expenseStatus1 = elasticsearchUtil.findOneDateQuotaLevel0(date,area,level,"50","2");
|
|
|
|
//获取已缴费的签约数
|
|
|
|
// Map<String, Object> expenseStatus1Sigjn = getByIndexSingle(date, area, level, "1",dateFormat);
|
|
|
|
SaveModel expenseStatus1Sigjn = elasticsearchUtil.findOneDateQuotaLevel0(date,area,level,"1","2");
|
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
|
if (SaveModel.teamLevel.equals(level)) {
|
|
|
|
jsonObject.put("name", expenseStatus1Sigjn.getTeamName());
|
|
|
|
} else if (SaveModel.OrgLevel.equals(level)) {
|
|
|
|
jsonObject.put("name", expenseStatus1Sigjn.getHospitalName());
|
|
|
|
} else if (SaveModel.townLevel.equals(level)) {
|
|
|
|
jsonObject.put("name", expenseStatus1Sigjn.getTownName());
|
|
|
|
} else if (SaveModel.cityLevel.equals(level)) {
|
|
|
|
jsonObject.put("name", expenseStatus1Sigjn.getCityName());
|
|
|
|
}
|
|
|
|
jsonObject.put("code", area);
|
|
|
|
Long weChatAmount0 = Long.valueOf(expenseStatus0.getResult2().toString());
|
|
|
|
Long weChatAmount1 = Long.valueOf(expenseStatus1.getResult2().toString());
|
|
|
|
Long signAccount = Long.valueOf(expenseStatus1Sigjn.getResult2().toString());
|
|
|
|
jsonObject.put("weChatAmount0", weChatAmount0);//微信关注未交费数
|
|
|
|
jsonObject.put("weChatAmount1", weChatAmount1);//微信关注已交费数
|
|
|
|
jsonObject.put("bindRate", getRangeDouuble(weChatAmount1.intValue(), signAccount.intValue(), 2));//微信关注率
|
|
|
|
return jsonObject;
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* 获取某个指标某一天某一level的值 到达量(单条记录)
|
|
|
|
*
|
|
|
|
* @param date
|
|
|
|
* @param area
|
|
|
|
* @param level
|
|
|
|
* @param index
|
|
|
|
* @param dateFormat
|
|
|
|
* @return
|
|
|
|
* @throws Exception
|
|
|
|
*/
|
|
|
|
private Map<String,Object> getByIndexSingle(String date, String area, int level, String index, SimpleDateFormat dateFormat) throws Exception {
|
|
|
|
Map<String,Object> map =null;
|
|
|
|
if (date.compareTo(dateFormat.format(new Date())) >= 0) {
|
|
|
|
map = getTodayLowLevelTotalSingle(date, area, level, index);
|
|
|
|
}
|
|
|
|
return map;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 获取今天某个区域一级指标的下级统计(单条记录)
|
|
|
|
*
|
|
|
|
* @param area
|
|
|
|
* @param level
|
|
|
|
* @param index
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public Map<String, Object> getTodayLowLevelTotalSingle(String date, String area, int level, String index) throws Exception {
|
|
|
|
Map<String, Object> data = new HashMap<>();
|
|
|
|
String redisData = "";
|
|
|
|
try {
|
|
|
|
// redisData = redisTemplate.opsForValue().get("quota:" + index + ":" + level + ":" + area + ":" + getQuotaTimeStamp());
|
|
|
|
} catch (Exception e) {
|
|
|
|
redisData = "";
|
|
|
|
}
|
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(redisData)) {
|
|
|
|
JSONObject json = new JSONObject(redisData);
|
|
|
|
data.put("code", String.valueOf(json.get("code")));
|
|
|
|
data.put("name", String.valueOf(json.get("name")));
|
|
|
|
data.put("amount",String.valueOf(json.get("num")));
|
|
|
|
} else {
|
|
|
|
Calendar today = Calendar.getInstance();
|
|
|
|
today.add(Calendar.DATE, -1);
|
|
|
|
String preDate = new SimpleDateFormat("yyyy-MM-dd").format(today.getTime());
|
|
|
|
// data = getTodayBeforeLowLevelTotalSingle(preDate, area, level, index);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return data;
|
|
|
|
}
|
|
}
|
|
}
|