Преглед изворни кода

Merge branch 'dev' of http://192.168.1.220:10080/Amoy2/wlyy2.0 into dev

wushilong пре 3 година
родитељ
комит
e60e0e1f33

+ 3 - 0
business/base-service/src/main/java/com/yihu/jw/gateway/dao/GcTokenDao.java

@ -26,4 +26,7 @@ public interface GcTokenDao extends PagingAndSortingRepository<GcToken, Long>, J
    @Query("from GcToken where appid=?1 and outTime >= now () ")
    List<GcToken> findByAppId(String token);
    @Query("from GcToken where appid=?1 and outTime >= ?2 and del=1 ")
    List<GcToken> findByAppIdAndOutTime(String token, Date now);
}

+ 4 - 0
business/base-service/src/main/java/com/yihu/jw/gateway/service/GcTokenService.java

@ -116,4 +116,8 @@ public class GcTokenService {
        }
    }
    public List<GcToken> findByAppIdAndOutTime(String appid,Date now){
        return tokenDao.findByAppIdAndOutTime(appid,now);
    }
}

+ 58 - 0
common/common-util/src/main/java/com/yihu/jw/util/common/NetworkUtil.java

@ -0,0 +1,58 @@
package com.yihu.jw.util.common;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/** 
 * 常用获取客户端信息的工具 
 *  
 */
public final class NetworkUtil {
	/**
	 * 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;
	 *
	 * @param request
	 * @return
	 * @throws IOException
	 */
	public final static String getIpAddress(HttpServletRequest request) throws IOException {
		// 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
		String ip = request.getHeader("X-Forwarded-For");
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
				ip = request.getHeader("Proxy-Client-IP");
			}
			if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
				ip = request.getHeader("WL-Proxy-Client-IP");
			}
			if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
				ip = request.getHeader("HTTP_CLIENT_IP");
			}
			if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
				ip = request.getHeader("HTTP_X_FORWARDED_FOR");
			}
			if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
				ip = request.getRemoteAddr();
			}
		} else if (ip.length() > 15) {
			String[] ips = ip.split(",");
			for (int index = 0; index < ips.length; index++) {
				String strIp = (String) ips[index];
				if (!("unknown".equalsIgnoreCase(strIp))) {
					ip = strIp;
					break;
				}
			}
		}
		return ip;
	}
}

+ 40 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/config/MvcConfig.java

@ -0,0 +1,40 @@
package com.yihu.jw.care.config;
import com.tencentcloudapi.cdn.v20180606.models.UserAgentFilter;
import com.yihu.jw.care.interceptors.GateWayInterceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
 * Created by chenweida on 2017/4/6.
 */
@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {
    private Logger logger = LoggerFactory.getLogger(MvcConfig.class);
    @Autowired
    private GateWayInterceptor gateWayInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 多个拦截器组成一个拦截器链
        // addPathPatterns 用于添加拦截规则
//         excludePathPatterns 用户排除拦截 ,/third/juye/kit/**
        registry.addInterceptor(gateWayInterceptor).addPathPatterns("/open/gc/**").excludePathPatterns(
                "/open/gc/accesstoken");
        super.addInterceptors(registry);
        logger.info("init gateWayInterceptor");
    }
}

+ 115 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/wlyygc/GcTokenController.java

@ -0,0 +1,115 @@
package com.yihu.jw.care.endpoint.wlyygc;
import com.yihu.jw.care.vo.BaseResultModel;
import com.yihu.jw.care.vo.GcClientDetailsModel;
import com.yihu.jw.care.vo.GcTokenModel;
import com.yihu.jw.care.vo.ResultOneModel;
import com.yihu.jw.entity.iot.gateway.GcClientDetails;
import com.yihu.jw.entity.iot.gateway.GcHttpLog;
import com.yihu.jw.entity.iot.gateway.GcToken;
import com.yihu.jw.gateway.dao.GcHttpLogDao;
import com.yihu.jw.gateway.service.GcClientDetailsService;
import com.yihu.jw.gateway.service.GcTokenService;
import com.yihu.jw.util.common.NetworkUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.json.JSONObject;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Date;
import java.util.List;
/**
 * Created by yeshijie on 2022/01/18.
 * 对外的网关
 */
@Controller
@RequestMapping(value = "open/gc", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
@Api(description = "gctoken相关服务")
public class GcTokenController {
    @Autowired
    private GcTokenService gcTokenService;
    @Autowired
    private GcClientDetailsService clientDetailsService;
    @Autowired
    private GcHttpLogDao httpLogDao;
    @ApiOperation("获取accesstoken")
    @RequestMapping(value = "accesstoken", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
    public ResultOneModel<GcTokenModel> getToken(
            @ApiParam(name = "appid", value = "appid", required = true) @RequestParam(required = true, value = "appid") String appid,
            @ApiParam(name = "appSecret", value = "appSecret", required = true) @RequestParam(required = true, value = "appSecret") String appSecret,
            @ApiParam(name = "过期时间 yyyy-MM-dd", value = "overTime", required = false) @RequestParam(required = false, value = "overTime") String overTime,
            HttpServletRequest request) {
        String ip = "";
        try {
            ip = NetworkUtil.getIpAddress(request);
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            //查询appId 的token是否过期
            GcToken gcToken = new GcToken();
            List<GcToken> gcTokenList = gcTokenService.findByAppIdAndOutTime(appid, new Date());
            if(gcTokenList == null || gcTokenList.size() == 0){
                //得到用户
                GcClientDetails clientDetails = clientDetailsService.findByAppId(appid);
                if (clientDetails == null) {
                    ResultOneModel resultOneModel = new ResultOneModel(null);
                    resultOneModel.setStatus(BaseResultModel.statusEm.error_Appid.getCode());
                    resultOneModel.setMessage(BaseResultModel.statusEm.error_Appid.getMessage());
                    saveHttpLog(ip, new JSONObject(request.getParameterMap()).toString(), "", "", request.getRequestURI(), 0, BaseResultModel.statusEm.error_Appid.getMessage());
                    return resultOneModel;
                }
                //判断appSecret
                if (!appSecret.equals(clientDetails.getAppSecret())) {
                    ResultOneModel resultOneModel = new ResultOneModel(null);
                    resultOneModel.setStatus(BaseResultModel.statusEm.error_AppSecret.getCode());
                    resultOneModel.setMessage(BaseResultModel.statusEm.error_AppSecret.getMessage());
                    saveHttpLog(ip, new JSONObject(request.getParameterMap()).toString(), "", "", request.getRequestURI(), 0, BaseResultModel.statusEm.error_Appid.getMessage());
                    return resultOneModel;
                }
                //生成token
                gcToken = gcTokenService.createToken(appid, appSecret, ip,overTime,2);
                saveHttpLog(ip, new JSONObject(request.getParameterMap()).toString(), new JSONObject(gcToken).toString(), gcToken.getAccesstoken(), request.getRequestURI(), 1, "成功");
            }else {
                gcToken = gcTokenList.get(0);
            }
            GcTokenModel gcTokenModel = new GcTokenModel();
            BeanUtils.copyProperties(gcToken, gcTokenModel);
            gcTokenModel.setOutTime(gcToken.getOutTime().getTime());
            return new ResultOneModel(gcTokenModel);
        } catch (Exception e) {
            saveHttpLog(ip, new JSONObject(request.getParameterMap()).toString(), "", "", request.getRequestURI(), 0, BaseResultModel.statusEm.login_system_error.getMessage());
            return new ResultOneModel(BaseResultModel.statusEm.login_system_error.getCode(), BaseResultModel.statusEm.login_system_error.getMessage());
        }
    }
    private void saveHttpLog(String ip, String input, String output, String token, String method, Integer flag, String message) {
        GcHttpLog gcHttpLog = new GcHttpLog();
        gcHttpLog.setCreateTime(new Date());
        gcHttpLog.setIp(ip);
        gcHttpLog.setInput(input);
        if(output.length() > 3000) {
            output = output.substring(0, 3000);
        }
        gcHttpLog.setOutput(output);
        gcHttpLog.setToken(token);
        gcHttpLog.setMethod(method);
        gcHttpLog.setFlag(flag);
        gcHttpLog.setMessage(message);
        httpLogDao.save(gcHttpLog);
    }
}

+ 80 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/wlyygc/WlyygcDataEndpoint.java

@ -0,0 +1,80 @@
package com.yihu.jw.care.endpoint.wlyygc;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.service.statistics.WlyygcStatisticsService;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
 * Created by yeshijie on 2022/1/18.
 */
@RestController
@RequestMapping(value = "open/gc/data")
@Api(value = "对外开放统计数据", tags = {"对外开放统计数据"})
public class WlyygcDataEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private WlyygcStatisticsService wlyygcStatisticsService;
    @GetMapping(value = "signOlderNum")
    @ApiOperation(value = "社区签约老人数量")
    public ObjEnvelop signOlderNum(@ApiParam(name = "code", value = "社区编码")
                                   @RequestParam(value = "code", required = true) String code) {
        try {
            Integer result = wlyygcStatisticsService.signOlderNum(code);
            return success(result);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "deviceInfo")
    @ApiOperation(value = "绑定设备在线数量,绑定设备总数")
    public ObjEnvelop deviceInfo(@ApiParam(name = "code", value = "社区编码")
                                  @RequestParam(value = "code", required = true) String code) {
        try {
            JSONObject result = wlyygcStatisticsService.deviceInfo(code);
            return success(result);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "emeAndSec")
    @ApiOperation(value = "安防/紧急呼叫总数")
    public ObjEnvelop emeAndSec(@ApiParam(name = "code", value = "社区编码")
                                 @RequestParam(value = "code", required = true) String code) {
        try {
            JSONObject result = wlyygcStatisticsService.emeAndSec(code);
            return success(result);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "emeAndSecInfo")
    @ApiOperation(value = "安防/紧急呼叫概要")
    public ListEnvelop emeAndSecInfo(@ApiParam(name = "code", value = "社区编码")
                                    @RequestParam(value = "code", required = true) String code,
                                     @ApiParam(name = "page", value = "分页大小", required = true)
                                    @RequestParam(value = "page") Integer page,
                                     @ApiParam(name = "size", value = "页码", required = true)
                                    @RequestParam(value = "size") Integer size) {
        try {
            JSONArray result = wlyygcStatisticsService.emeAndSecInfo(page,size,code);
            return success(result);
        } catch (Exception e) {
            return failedListEnvelopException2(e);
        }
    }
}

+ 159 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/interceptors/GateWayInterceptor.java

@ -0,0 +1,159 @@
package com.yihu.jw.care.interceptors;
/**
 * Created by chenweida on 2017/8/17.
 */
import com.yihu.jw.care.vo.BaseResultModel;
import com.yihu.jw.entity.iot.gateway.GcHttpLog;
import com.yihu.jw.entity.iot.gateway.GcToken;
import com.yihu.jw.gateway.dao.GcHttpLogDao;
import com.yihu.jw.gateway.dao.GcTokenDao;
import com.yihu.jw.util.common.NetworkUtil;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
/**
 * 对外的请求拦截
 */
@Component
public class GateWayInterceptor implements HandlerInterceptor {
    private Logger logger = LoggerFactory.getLogger(GateWayInterceptor.class);
    @Autowired
    private GcHttpLogDao httpLogDao;
    @Autowired
    private GcTokenDao gcTokenDaoDao;
    public static String status = "1";
    /**
     * preHandle:预处理回调方法
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        boolean flag = true;
        String accesstoken = request.getHeader("accesstoken");
        String ip = NetworkUtil.getIpAddress(request);
        //********************************判断accesstoken********************************
        try {
            if (org.springframework.util.StringUtils.isEmpty(accesstoken)) {
                saveHttpLog(ip, JSONObject.fromObject(request.getParameterMap()).toString(), null, accesstoken, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), BaseResultModel.statusEm.token_null.getMessage());
                //没权限
                BaseResultModel baseResultModel = new BaseResultModel(BaseResultModel.statusEm.token_null.getCode(), BaseResultModel.statusEm.token_null.getMessage());
                response.getOutputStream().write(JSONObject.fromObject(baseResultModel).toString().getBytes());
                return false;
            }
            GcToken gcToken = gcTokenDaoDao.findByToken(accesstoken);
            if (gcToken == null) {
                saveHttpLog(ip, JSONObject.fromObject(request.getParameterMap()).toString(), null, accesstoken, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), BaseResultModel.statusEm.token_no_power.getMessage());
                //没权限
                BaseResultModel baseResultModel = new BaseResultModel(BaseResultModel.statusEm.token_no_power.getCode(), BaseResultModel.statusEm.token_no_power.getMessage());
                response.getOutputStream().write(JSONObject.fromObject(baseResultModel).toString().getBytes());
                return false;
            }
            if (gcToken.getDel() == null || gcToken.getDel() == 0) {
                saveHttpLog(ip, JSONObject.fromObject(request.getParameterMap()).toString(), null, accesstoken, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), BaseResultModel.statusEm.token_out_effect.getMessage());
                //token无效
                BaseResultModel baseResultModel = new BaseResultModel(BaseResultModel.statusEm.token_out_effect.getCode(), BaseResultModel.statusEm.token_out_effect.getMessage());
                response.getOutputStream().write(JSONObject.fromObject(baseResultModel).toString().getBytes());
                return false;
            }
            if (System.currentTimeMillis() > gcToken.getOutTime().getTime()) {
                saveHttpLog(ip, JSONObject.fromObject(request.getParameterMap()).toString(), null, accesstoken, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), BaseResultModel.statusEm.token_out_time.getMessage());
                //token过期
                BaseResultModel baseResultModel = new BaseResultModel(BaseResultModel.statusEm.token_out_time.getCode(), BaseResultModel.statusEm.token_out_time.getMessage());
                response.getOutputStream().write(JSONObject.fromObject(baseResultModel).toString().getBytes());
                return false;
            }
        } catch (Exception e) {
            saveHttpLog(ip, JSONObject.fromObject(request.getParameterMap()).toString(), null, accesstoken, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), e.getMessage());
            return false;
        }
        //********************************判断accesstoken********************************
        return flag;
    }
    /**
     * 后处理回调方法
     *
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        String output = "";
        if (modelAndView != null) {
            output = JSONObject.fromObject(modelAndView.getModelMap()).toString();
        } else {
            Object returnObj = request.getAttribute("returnObj");
            if (returnObj != null) {
                output = JSONObject.fromObject(returnObj).toString();
            }
        }
        HandlerMethod handlerMethod = (HandlerMethod) handler;
//        response.getOutputStream()
        String token = request.getHeader("accesstoken");
        String ip = NetworkUtil.getIpAddress(request);
        saveHttpLog(ip,
                JSONObject.fromObject(request.getParameterMap()).toString(),
                output,
                token,
                request.getRequestURI(),
                GcHttpLog.flagEm.success.getCode(),
                null);
    }
    /**
     * 整个请求处理完毕回调方法
     *
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }
    public void saveHttpLog(String ip, String input, String output, String token, String method, Integer flag, String message) {
        GcHttpLog gcHttpLog = new GcHttpLog();
        gcHttpLog.setCreateTime(new Date());
        gcHttpLog.setIp(ip);
        gcHttpLog.setInput(input);
        if(output!=null&&output.length() > 3000) {
            output = output.substring(0, 3000);
        }
        gcHttpLog.setOutput(output);
        gcHttpLog.setToken(token);
        gcHttpLog.setMethod(method);
        gcHttpLog.setFlag(flag);
        gcHttpLog.setMessage(message);
        httpLogDao.save(gcHttpLog);
    }
}

+ 2 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/security/SecurityMonitoringOrderService.java

@ -2448,12 +2448,12 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                                        tmp.put("atHome", true);
                                    }
                                } else {
                                    tmp.put("atHome", null);
                                    tmp.put("atHome", true);
                                }
                                String locationAddress = LatitudeUtils.getLocationAddress(latLon[0], latLon[1]);
                                tmp.put("address", locationAddress);
                            } else {
                                tmp.put("atHome", null);
                                tmp.put("atHome", true);
                                tmp.put("address", "");
                            }
                        }

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/StatisticsService.java

@ -285,7 +285,7 @@ public class StatisticsService {
                filter2 = " and org_code not in ('" + orgCodes + "') ";
            }
            String emergencyCallSql = "SELECT COUNT(1) FROM base_emergency_assistance_order WHERE status >= 0 "+filter;
            String emergencyCallSql = "SELECT COUNT(1) FROM base_emergency_assistance_order WHERE status >= 0 "+filter2;
            Integer emergencyCallNum = jdbcTemplate.queryForObject(emergencyCallSql, Integer.class);
            String securityMonitoringSql = "SELECT COUNT(1) FROM base_security_monitoring_order where 1=1 "+filter;
            Integer securityMonitoringNum = jdbcTemplate.queryForObject(securityMonitoringSql, Integer.class);

+ 239 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/WlyygcStatisticsService.java

@ -0,0 +1,239 @@
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.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),d.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());
            if("1".equals(map.get("contact_status"))){
                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 JSONArray emeAndSecInfo(Integer page, Integer size,String code){
        JSONArray jsonArray = new JSONArray();
        String filter = "";
        if("1".equals(code)){
            filter = " and r.team_code = '8a92aba97a9f6f49017ae4fdbdmqteam' ";
        }else {
            return jsonArray;
        }
        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 ORDER BY a.create_time desc limit "+(page*size)+","+size;
        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);
        }
        return jsonArray;
    }
}

+ 98 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/vo/BaseResultModel.java

@ -0,0 +1,98 @@
package com.yihu.jw.care.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * Created by chenweida on 2017/8/17.
 */
@ApiModel("返回实体")
public class BaseResultModel {
    @ApiModelProperty(value = "状态", required = false, access = "response")
    protected Integer status = statusEm.success.getCode();
    @ApiModelProperty(value = "信息", required = false, access = "response")
    protected String message = "成功";
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public enum statusEm {
        success(10000, "请求成功"),//请求成功
        error_Appid(-9000, "appid不存在"),//appid不存在
        error_AppSecret(-9001, "AppSecret不存在"),//AppSecret不存在
        token_out_effect(-9002, "无效的token"),//token无效
        token_no_power(-9003, "用户没权限"),// 没权限 包括未授权 或者uri错误
        token_out_time(-9004, "accesstoken已过期"),//token无效
        token_null(-9005, "accesstoken为空"),// 没权限 包括未授权 或者uri错误
        error_params(-10000, "请求失败 参数错误"),//请求失败 参数错误
        error_no_ip(-10010, "请求失败,获取IP失败"),//请求失败,获取IP失败
        login_system_error(-10020, "系统异常"),
        login_publickey_error(-10030, "获取公钥失败"),
        file_upload_error(-10040, "文件上传失败"),
        find_error(-10050, "查询失败"),
        opera_error(-10060, "操作失败"),
        no_openid(-30000,"用户openId为空无法发送"),
        login_account_error(-20010, "账号不存在"),
        login_password_error(-20020, "密码错误"),
        login_IMEI_error(-20030, "获取imei失败");
        ;
        statusEm(Integer code, String message) {
            this.code = code;
            this.message = message;
        }
        private Integer code;
        private String message;
        public Integer getCode() {
            return code;
        }
        public void setCode(Integer code) {
            this.code = code;
        }
        public String getMessage() {
            return message;
        }
        public void setMessage(String message) {
            this.message = message;
        }
    }
    public BaseResultModel() {
    }
    public BaseResultModel(String message) {
        this.message = message;
    }
    public BaseResultModel(Integer status, String message) {
        this.status = status;
        this.message = message;
    }
}

+ 33 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/vo/GcClientDetailsModel.java

@ -0,0 +1,33 @@
package com.yihu.jw.care.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * GtClientDetails entity. @author MyEclipse Persistence Tools
 */
@ApiModel(description = "")
public class GcClientDetailsModel{
    // Fields
    @ApiModelProperty(value = "appId", required = false, access = "response")
    private String appId;
    @ApiModelProperty(value = "appSecret", required = false, access = "response")
    private String appSecret;
    public String getAppId() {
        return appId;
    }
    public void setAppId(String appId) {
        this.appId = appId;
    }
    public String getAppSecret() {
        return appSecret;
    }
    public void setAppSecret(String appSecret) {
        this.appSecret = appSecret;
    }
}

+ 51 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/vo/GcTokenModel.java

@ -0,0 +1,51 @@
package com.yihu.jw.care.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
/**
 * Created by chenweida on 2017/8/17.
 */
@ApiModel(description = "")
public class GcTokenModel {
    @ApiModelProperty(value = "请求凭证", required = false, access = "response")
    private String accesstoken;
    @ApiModelProperty(value = "创建时间", required = false, access = "response")
    private Date createTime;
    @ApiModelProperty(value = "过期时间", required = false, access = "response")
    private Long outTime;
    public String getAccesstoken() {
        return accesstoken;
    }
    public void setAccesstoken(String accesstoken) {
        this.accesstoken = accesstoken;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    /*public Date getOutTime() {
        return outTime;
    }
    public void setOutTime(Date outTime) {
        this.outTime = outTime;
    }*/
    public Long getOutTime() {
        return outTime;
    }
    public void setOutTime(Long outTime) {
        this.outTime = outTime;
    }
}

+ 39 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/vo/ResultOneModel.java

@ -0,0 +1,39 @@
package com.yihu.jw.care.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * Created by chenweida on 2017/8/17.
 * 对外放回的实体
 */
@ApiModel("返回的实体类")
public class ResultOneModel<T> extends BaseResultModel {
    @ApiModelProperty(value = "返回数据", required = false, access = "response")
    private T result;
    public T getResult() {
        return result;
    }
    public void setResult(T result) {
        this.result = result;
    }
    public ResultOneModel(T result) {
        this.result = result;
    }
    public ResultOneModel() {
    }
    public ResultOneModel(Integer code, String message) {
        super(code, message);
    }
    public ResultOneModel(Integer status, String message, T result) {
        super(status, message);
        this.result = result;
    }
}

+ 1 - 1
svr/svr-iot-sn/readme.MD

@ -1,6 +1,6 @@
Internet of things  物联网平台
IotAnalyzerController 的代码已经移到i健康的device项目
filters 字符串拼接规则
         * like:使用"?"来表示,如:name?'%医'