|
@ -0,0 +1,403 @@
|
|
|
package com.yihu.jw.care.service.statistics;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.yihu.jw.care.dao.security.BaseEmergencyWarnLogDao;
|
|
|
import com.yihu.jw.entity.care.securitymonitoring.BaseEmergencyWarnLogDO;
|
|
|
import com.yihu.jw.restmodel.web.PageEnvelop;
|
|
|
import com.yihu.jw.util.common.IdCardUtil;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* Created by yeshijie on 2022/1/18.
|
|
|
*/
|
|
|
@Service
|
|
|
public class WlyygcStatisticsService {
|
|
|
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
@Autowired
|
|
|
private BaseEmergencyWarnLogDao logDao;
|
|
|
|
|
|
/**
|
|
|
* 社区签约老人数量
|
|
|
* @return
|
|
|
*/
|
|
|
public Integer signOlderNum(String code){
|
|
|
String sql = "select count(DISTINCT p.id) FROM " +
|
|
|
"base_patient p INNER JOIN base_service_package_sign_record sr on p.id = sr.patient and sr.`status`=1 " +
|
|
|
", base_service_package_record r "+
|
|
|
"WHERE p.del = 1 and p.archive_type =1 and r.patient = p.id";
|
|
|
|
|
|
if("1".equals(code)){
|
|
|
//1华联社区
|
|
|
sql += " and r.team_code = '8a92aba97a9f6f49017ae4fdbdmqteam' ";
|
|
|
}else {
|
|
|
return 0;
|
|
|
}
|
|
|
Integer res = jdbcTemplate.queryForObject(sql,Integer.class);
|
|
|
return res;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 绑定设备在线数量,绑定设备总数
|
|
|
* @return
|
|
|
*/
|
|
|
public JSONObject deviceInfo(String code){
|
|
|
JSONObject json = new JSONObject();
|
|
|
Integer total = 0;
|
|
|
Integer online = 0;
|
|
|
String sql = "select count(DISTINCT d.id) c, IFNULL(d.contact_status,0) contact_status FROM " +
|
|
|
"base_patient p INNER JOIN base_service_package_sign_record sr on p.id = sr.patient and sr.`status`=1 " +
|
|
|
", base_service_package_record r, wlyy_patient_device pd ,wlyy_devices d " +
|
|
|
"WHERE p.del = 1 and p.archive_type =1 and r.patient = p.id " +
|
|
|
"and p.id = pd.`user` and d.device_code = pd.device_sn ";
|
|
|
if("1".equals(code)){
|
|
|
//1华联社区
|
|
|
sql += " and r.team_code = '8a92aba97a9f6f49017ae4fdbdmqteam' ";
|
|
|
}else {
|
|
|
return json;
|
|
|
}
|
|
|
sql += " GROUP BY d.contact_status ";
|
|
|
List<Map<String,Object>> res = jdbcTemplate.queryForList(sql);
|
|
|
for (Map<String,Object> map : res){
|
|
|
Integer num = Integer.valueOf(map.get("c").toString());
|
|
|
Integer contact_status = Integer.valueOf(map.get("contact_status").toString());
|
|
|
if(contact_status==1){
|
|
|
online = num;
|
|
|
}
|
|
|
total += num;
|
|
|
}
|
|
|
json.put("total",total);
|
|
|
json.put("online",online);
|
|
|
return json;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 紧急救助和安防监控数量
|
|
|
* @param code
|
|
|
* @return
|
|
|
*/
|
|
|
public JSONObject emeAndSec(String code){
|
|
|
JSONObject json = new JSONObject();
|
|
|
String sqlEme = "select count(DISTINCT o.id) c,o.status FROM " +
|
|
|
"base_patient p INNER JOIN base_service_package_sign_record sr on p.id = sr.patient and sr.`status`=1 " +
|
|
|
", base_service_package_record r, base_emergency_assistance_order o " +
|
|
|
"WHERE p.del = 1 and p.archive_type =1 and r.patient = p.id " +
|
|
|
"and p.id = o.patient ";
|
|
|
String sqlSec = "select count(DISTINCT o.id) c,o.status FROM " +
|
|
|
"base_patient p INNER JOIN base_service_package_sign_record sr on p.id = sr.patient and sr.`status`=1 " +
|
|
|
", base_service_package_record r, base_security_monitoring_order o " +
|
|
|
"WHERE p.del = 1 and p.archive_type =1 and r.patient = p.id " +
|
|
|
"and p.id = o.patient ";
|
|
|
|
|
|
String filter = "";
|
|
|
if("1".equals(code)){
|
|
|
filter += " and r.team_code = '8a92aba97a9f6f49017ae4fdbdmqteam' ";
|
|
|
}else {
|
|
|
return json;
|
|
|
}
|
|
|
filter += " GROUP BY o.status";
|
|
|
|
|
|
Integer emeTotla = 0;
|
|
|
Integer emeErrorWarning = 0;
|
|
|
Integer emeCancel = 0;
|
|
|
Integer emeComplete = 0;
|
|
|
Integer emeApply = 0;
|
|
|
|
|
|
Integer secTotla = 0;
|
|
|
Integer secErrorWarning = 0;
|
|
|
Integer secCancel = 0;
|
|
|
Integer secComplete = 0;
|
|
|
Integer secApply = 0;
|
|
|
|
|
|
List<Map<String,Object>> res1 = jdbcTemplate.queryForList(sqlEme + filter);
|
|
|
for (Map<String,Object> map : res1){
|
|
|
Integer num = Integer.valueOf(map.get("c").toString());
|
|
|
String status = map.get("status")+"";
|
|
|
emeTotla += num;
|
|
|
if("1".equals(status)){
|
|
|
emeApply = num;
|
|
|
continue;
|
|
|
}
|
|
|
if("0".equals(status)){
|
|
|
emeComplete = num;
|
|
|
continue;
|
|
|
}
|
|
|
if("-1".equals(status)){
|
|
|
emeCancel = num;
|
|
|
continue;
|
|
|
}
|
|
|
if("-2".equals(status)){
|
|
|
emeErrorWarning = num;
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
List<Map<String,Object>> res2 = jdbcTemplate.queryForList(sqlSec + filter);
|
|
|
for (Map<String,Object> map : res2){
|
|
|
Integer num = Integer.valueOf(map.get("c").toString());
|
|
|
String status = map.get("status")+"";
|
|
|
secTotla += num;
|
|
|
if("1".equals(status)){
|
|
|
secApply = num;
|
|
|
continue;
|
|
|
}
|
|
|
if("0".equals(status)){
|
|
|
secComplete = num;
|
|
|
continue;
|
|
|
}
|
|
|
if("-1".equals(status)){
|
|
|
secCancel = num;
|
|
|
continue;
|
|
|
}
|
|
|
if("-2".equals(status)){
|
|
|
secErrorWarning = num;
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
json.put("secTotla",secTotla);
|
|
|
json.put("secApply",secApply);
|
|
|
json.put("secComplete",secComplete);
|
|
|
json.put("secCancel",secCancel);
|
|
|
json.put("secErrorWarning",secErrorWarning);
|
|
|
|
|
|
json.put("emeTotla",emeTotla);
|
|
|
json.put("emeApply",emeApply);
|
|
|
json.put("emeComplete",emeComplete);
|
|
|
json.put("emeCancel",emeCancel);
|
|
|
json.put("emeErrorWarning",emeErrorWarning);
|
|
|
return json;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 安防/紧急呼叫概要
|
|
|
* @param page
|
|
|
* @param size
|
|
|
* @param code
|
|
|
* @return
|
|
|
*/
|
|
|
public PageEnvelop emeAndSecInfo(Integer page, Integer size, String code, Integer type, Integer status){
|
|
|
JSONArray jsonArray = new JSONArray();
|
|
|
String filter = "";
|
|
|
if("1".equals(code)){
|
|
|
filter = " and r.team_code = '8a92aba97a9f6f49017ae4fdbdmqteam' ";
|
|
|
}else {
|
|
|
return PageEnvelop.getSuccess("查询成功");
|
|
|
}
|
|
|
if(status!=null){
|
|
|
filter += " and o.status = "+status;
|
|
|
}
|
|
|
if(page==null){
|
|
|
page =1;
|
|
|
}
|
|
|
if(size==null){
|
|
|
size = 10;
|
|
|
}
|
|
|
Map<String,String> statusMap = new HashMap<>();
|
|
|
statusMap.put("-1","已取消");
|
|
|
statusMap.put("-2","误报警");
|
|
|
statusMap.put("0","已完成");
|
|
|
statusMap.put("1","申请中");
|
|
|
String sql = "SELECT * from ( " +
|
|
|
"select o.id,p.name,p.idcard,p.residential_area,'1' type,o.serve_address,'紧急呼叫' serve_desc,o.status,o.create_time FROM " +
|
|
|
"base_patient p INNER JOIN base_service_package_sign_record sr on p.id = sr.patient and sr.`status`=1 " +
|
|
|
", base_service_package_record r, base_emergency_assistance_order o " +
|
|
|
"WHERE p.del = 1 and p.archive_type =1 and r.patient = p.id " +
|
|
|
"and p.id = o.patient " + filter +
|
|
|
"UNION ALL " +
|
|
|
"select o.id,p.name,p.idcard,p.residential_area,'2' type,o.serve_address,o.serve_desc,o.status,o.create_time FROM " +
|
|
|
"base_patient p INNER JOIN base_service_package_sign_record sr on p.id = sr.patient and sr.`status`=1 " +
|
|
|
", base_service_package_record r, base_security_monitoring_order o " +
|
|
|
"WHERE p.del = 1 and p.archive_type =1 and r.patient = p.id " +
|
|
|
"and p.id = o.patient " + filter +
|
|
|
" ) a where 1=1 ";
|
|
|
if(type!=null){
|
|
|
sql += " and a.type = '"+type+"'";
|
|
|
}
|
|
|
sql += "ORDER BY a.create_time desc limit "+(page-1)*size+","+size;
|
|
|
|
|
|
String sqlCount = "SELECT count(*) from ( " +
|
|
|
"select o.id,'1' type FROM " +
|
|
|
"base_patient p INNER JOIN base_service_package_sign_record sr on p.id = sr.patient and sr.`status`=1 " +
|
|
|
", base_service_package_record r, base_emergency_assistance_order o " +
|
|
|
"WHERE p.del = 1 and p.archive_type =1 and r.patient = p.id " +
|
|
|
"and p.id = o.patient " + filter +
|
|
|
" UNION ALL " +
|
|
|
"select o.id,'2' type FROM " +
|
|
|
"base_patient p INNER JOIN base_service_package_sign_record sr on p.id = sr.patient and sr.`status`=1 " +
|
|
|
", base_service_package_record r, base_security_monitoring_order o " +
|
|
|
"WHERE p.del = 1 and p.archive_type =1 and r.patient = p.id " +
|
|
|
"and p.id = o.patient " + filter +
|
|
|
" ) a where 1=1 ";
|
|
|
if(type!=null){
|
|
|
sqlCount += " and a.type = '"+type+"'";
|
|
|
}
|
|
|
|
|
|
List<Map<String,Object>> res = jdbcTemplate.queryForList(sql);
|
|
|
for (Map<String,Object> map : res){
|
|
|
JSONObject json = new JSONObject();
|
|
|
json.put("name",map.get("name"));
|
|
|
json.put("age", IdCardUtil.getAgeForIdcard(map.get("idcard")+""));
|
|
|
json.put("residentialArea",map.get("residential_area"));
|
|
|
json.put("type",map.get("type"));
|
|
|
json.put("serveAddress",map.get("serve_address"));
|
|
|
json.put("serveDesc",map.get("serve_desc"));
|
|
|
json.put("status",statusMap.get(map.get("status")+""));
|
|
|
json.put("createTime",map.get("create_time").toString().substring(0,19));
|
|
|
String orderLogInfo = "";
|
|
|
List<BaseEmergencyWarnLogDO> logDOS = logDao.findByOrderIdOrderByCreateTimeDesc(map.get("id")+"");
|
|
|
if(logDOS.size()>0){
|
|
|
BaseEmergencyWarnLogDO warnLogDO = logDOS.get(0);
|
|
|
orderLogInfo = warnLogDO.getUserName()+":"+warnLogDO.getContent();
|
|
|
}
|
|
|
json.put("orderLogInfo",orderLogInfo);
|
|
|
jsonArray.add(json);
|
|
|
}
|
|
|
long total = jdbcTemplate.queryForObject(sqlCount,Long.class);
|
|
|
return PageEnvelop.getSuccessListWithPage("查询成功",jsonArray,page,size,total);
|
|
|
}
|
|
|
|
|
|
public PageEnvelop signOldList(String code, Integer page, Integer size) {
|
|
|
if (page == null) {
|
|
|
page = 1;
|
|
|
}
|
|
|
if (size == null) {
|
|
|
size = 10;
|
|
|
}
|
|
|
String sql = "SELECT DISTINCT p.`name`, p.mobile, p.idcard,(CASE WHEN p.sex = 1 THEN '男' ELSE '女' END ) AS sex,p.address, TIMESTAMPDIFF(YEAR, p.birthday, CURDATE()) years,p.residential_area AS residentialArea" +
|
|
|
" FROM base_patient p INNER JOIN base_service_package_sign_record br ON p.id = br.patient, base_service_package_record r" +
|
|
|
" WHERE p.del = 1 AND br.`status` = 1 AND p.archive_type = 1 AND r.patient = p.id ";
|
|
|
String sqlCount = "SELECT count(DISTINCT p.id) " +
|
|
|
" FROM base_patient p INNER JOIN base_service_package_sign_record br ON p.id = br.patient, base_service_package_record r" +
|
|
|
" WHERE p.del = 1 AND br.`status` = 1 AND p.archive_type = 1 AND r.patient = p.id ";
|
|
|
if ("1".equals(code)) {
|
|
|
//1华联社区
|
|
|
sql += " and r.team_code = '8a92aba97a9f6f49017ae4fdbdmqteam' ";
|
|
|
sqlCount += " and r.team_code = '8a92aba97a9f6f49017ae4fdbdmqteam' ";
|
|
|
} else {
|
|
|
return PageEnvelop.getSuccess("查询成功");
|
|
|
}
|
|
|
sql += "ORDER BY p.`name` desc limit " + (page - 1)*size + "," + size;
|
|
|
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
|
|
|
long total = jdbcTemplate.queryForObject(sqlCount,Long.class);
|
|
|
return PageEnvelop.getSuccessListWithPage("查询成功",maps,page,size,total);
|
|
|
}
|
|
|
|
|
|
public PageEnvelop securityEmergencyList(String code,Integer type,Integer page,Integer size) {
|
|
|
String filter = "";
|
|
|
if("1".equals(code)){
|
|
|
filter = " and r.team_code = '8a92aba97a9f6f49017ae4fdbdmqteam' ";
|
|
|
}else {
|
|
|
return PageEnvelop.getSuccess("查询成功");
|
|
|
}
|
|
|
if(page==null){
|
|
|
page =1;
|
|
|
}
|
|
|
if(size==null){
|
|
|
size = 10;
|
|
|
}
|
|
|
String sql = "SELECT * from ( " +
|
|
|
"select p.name,'紧急呼叫' serveDesc,'1' type,o.create_time createTime FROM " +
|
|
|
"base_patient p INNER JOIN base_service_package_sign_record sr on p.id = sr.patient and sr.`status`=1 " +
|
|
|
", base_service_package_record r, base_emergency_assistance_order o " +
|
|
|
"WHERE p.del = 1 and p.archive_type =1 and r.patient = p.id " +
|
|
|
"and p.id = o.patient " + filter +
|
|
|
"UNION ALL " +
|
|
|
"select p.name,o.serve_desc serveDesc,'2' type,o.create_time createTime FROM " +
|
|
|
"base_patient p INNER JOIN base_service_package_sign_record sr on p.id = sr.patient and sr.`status`=1 " +
|
|
|
", base_service_package_record r, base_security_monitoring_order o " +
|
|
|
"WHERE p.del = 1 and p.archive_type =1 and r.patient = p.id " +
|
|
|
"and p.id = o.patient " + filter +
|
|
|
" ) a where 1=1 ";
|
|
|
if(type!=null){
|
|
|
sql += " and a.type = '"+type+"'";
|
|
|
}
|
|
|
sql += "ORDER BY a.createTime desc limit "+(page-1)*size+","+size;
|
|
|
|
|
|
String sqlCount = "SELECT count(*) from ( " +
|
|
|
"select o.id,'1' type FROM " +
|
|
|
"base_patient p INNER JOIN base_service_package_sign_record sr on p.id = sr.patient and sr.`status`=1 " +
|
|
|
", base_service_package_record r, base_emergency_assistance_order o " +
|
|
|
"WHERE p.del = 1 and p.archive_type =1 and r.patient = p.id " +
|
|
|
"and p.id = o.patient " + filter +
|
|
|
" UNION ALL " +
|
|
|
"select o.id,'2' type FROM " +
|
|
|
"base_patient p INNER JOIN base_service_package_sign_record sr on p.id = sr.patient and sr.`status`=1 " +
|
|
|
", base_service_package_record r, base_security_monitoring_order o " +
|
|
|
"WHERE p.del = 1 and p.archive_type =1 and r.patient = p.id " +
|
|
|
"and p.id = o.patient " + filter +
|
|
|
" ) a where 1=1 ";
|
|
|
if(type!=null){
|
|
|
sqlCount += " and a.type = '"+type+"'";
|
|
|
}
|
|
|
|
|
|
List<Map<String,Object>> res = jdbcTemplate.queryForList(sql);
|
|
|
for (Map<String,Object> map : res){
|
|
|
map.put("createTime",map.get("createTime").toString().substring(0,19));
|
|
|
}
|
|
|
long total = jdbcTemplate.queryForObject(sqlCount,Long.class);
|
|
|
return PageEnvelop.getSuccessListWithPage("查询成功",res,page,size,total);
|
|
|
}
|
|
|
|
|
|
|
|
|
public PageEnvelop deviceList(String code,Integer page,Integer size){
|
|
|
if (page == null) {
|
|
|
page = 1;
|
|
|
}
|
|
|
if (size == null) {
|
|
|
size = 10;
|
|
|
}
|
|
|
String filter ="";
|
|
|
if ("1".equals(code)){
|
|
|
filter += "AND r.team_code = '8a92aba97a9f6f49017ae4fdbdmqteam'";
|
|
|
}else {
|
|
|
return PageEnvelop.getSuccess("查询成功");
|
|
|
}
|
|
|
|
|
|
String deviceSql = "SELECT DISTINCT" +
|
|
|
" pd.device_name as deviceName," +
|
|
|
"pd.device_type as deviceType," +
|
|
|
"IFNULL(wd.collect_num,0) as collectNum " +
|
|
|
"FROM " +
|
|
|
"base_patient p " +
|
|
|
"INNER JOIN base_service_package_sign_record sr ON p.id = sr.patient " +
|
|
|
"AND sr.`status` = 1," +
|
|
|
" base_service_package_record r," +
|
|
|
" wlyy_patient_device pd," +
|
|
|
" wlyy_devices wd " +
|
|
|
"WHERE " +
|
|
|
"p.del = 1 " +
|
|
|
"AND p.archive_type = 1 " +
|
|
|
"AND r.patient = p.id " +
|
|
|
"AND p.id = pd.`user` " +
|
|
|
"AND pd.del = 0 "+
|
|
|
"AND wd.device_code = pd.device_sn "+filter+" ORDER BY pd.device_name DESC limit " + (page - 1)*size + "," + size;
|
|
|
|
|
|
List<Map<String, Object>> maps = jdbcTemplate.queryForList(deviceSql);
|
|
|
String sqlCount = "SELECT count(DISTINCT pd.id) " +
|
|
|
"FROM " +
|
|
|
"base_patient p " +
|
|
|
"INNER JOIN base_service_package_sign_record sr ON p.id = sr.patient " +
|
|
|
"AND sr.`status` = 1," +
|
|
|
" base_service_package_record r," +
|
|
|
" wlyy_patient_device pd," +
|
|
|
" wlyy_devices wd " +
|
|
|
"WHERE " +
|
|
|
"p.del = 1 " +
|
|
|
"AND p.archive_type = 1 " +
|
|
|
"AND r.patient = p.id " +
|
|
|
"AND p.id = pd.`user` " +
|
|
|
"AND pd.del = 0 "+
|
|
|
"AND wd.device_code = pd.device_sn "+filter;
|
|
|
long total = jdbcTemplate.queryForObject(sqlCount,Long.class);
|
|
|
return PageEnvelop.getSuccessListWithPage("查询成功",maps,page,size,total);
|
|
|
}
|
|
|
|
|
|
}
|