Commit 18a10678 by wqc

app数据修改

parent 9060fe45
package com.zq.api.controller;
import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;
import com.alibaba.fastjson.JSON;
import com.zq.api.constant.ApiCodeEnum;
import com.zq.api.constant.ApiMethod;
import com.zq.api.form.ApiForm;
import com.zq.api.form.ApiResp;
import com.zq.api.service.ApiService;
import com.zq.api.service.IApiLogic;
import com.zq.api.utils.ApiUtils;
import com.zq.common.utils.ThrowableUtil;
import com.zq.common.vo.ResultVo;
import feign.FeignException;
import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Api(tags = "API接口")
@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
public class ApiController {
private final ApiService apiService;
/**
* 获取信息入口
* <p>
* 2016年10月3日 下午1:38:27
*/
@RequestMapping("/action")
public ApiResp action(@RequestHeader(required = false) String appId, @RequestHeader(required = false) String appSecret, @RequestHeader(required = false) String Authorization, HttpServletRequest request) {
long start = System.currentTimeMillis();
ApiForm form = ServletUtil.toBean(request, ApiForm.class, true);
// 不处理Request Method:OPTIONS的请求
if (request.getMethod().equals("OPTIONS")) {
return ApiUtils.getSuccessResp(form);
}
form.setType(2);
String method = form.getMethod();
if (StrUtil.isBlank(method)) {
method = request.getParameter("method");
form.setMethod(method);
}
String stackTrace = "";
ApiResp resp;
try {
// 身份验证
resp = apiService.auth(form, appId, appSecret, Authorization);
if (resp.isSuccess()) {
//解析业务参数
if (!form.parseBizContent()) {
return ApiUtils.getParamError(form);
}
// 调用接口方法
resp = apiService.action(form);
}
} catch (Exception e) {
stackTrace = ThrowableUtil.getStackTrace(e);
// 判断指定异常是否来自或者包含指定异常
if (ExceptionUtil.isFromOrSuppressedThrowable(e, FeignException.Unauthorized.class)) {
resp = ApiUtils.toApiResp(form, ResultVo.fail(401, "Unauthorized"));
} else if (stackTrace.contains("Load balancer does not have available server for client")) {
resp = ApiUtils.getServiceNotAvailableError(form);
} else if (stackTrace.contains("Connection refused: connect executing")) {
resp = ApiUtils.getServiceNotAvailableError(form);
} else {
resp = ApiUtils.getMethodHandlerError(form);
}
}
// 没有数据输出空
resp = resp == null ? new ApiResp(form) : resp;
String logType = resp.isSuccess() ? "INFO" : "400".equals(resp.getCode()) ? "WARN" : "ERROR";
// 如果是500错误, 服务会返回错误的堆栈信息
if (resp.getCode().equals(ApiCodeEnum.SERVER_ERROR.code())) {
stackTrace = resp.getMsg();
resp.setMsg(ApiCodeEnum.SERVER_ERROR.msg());
}
// 调试日志
if (ApiUtils.DEBUG) {
System.out.println("API DEBUG ACTION \n[from=" + form + "]" + "\n[resp=" + JSON.toJSONString(resp) + "]" + "\n[time=" + (System.currentTimeMillis() - start) + "ms]");
}
String clientIP = ServletUtil.getClientIP(request);
apiService.addLog(form, clientIP, logType, resp.getMsg(), stackTrace, System.currentTimeMillis() - start);
return resp;
}
/**
* 开关调试日志
* <p>
* 2016年10月3日 下午5:47:46
*/
@RequestMapping("/debug")
public ApiResp debug(HttpServletRequest request) {
ApiForm from = ServletUtil.toBean(request, ApiForm.class, true);
ApiUtils.DEBUG = !ApiUtils.DEBUG;
return new ApiResp(from).setData(ApiUtils.DEBUG);
}
@RequestMapping("/method")
public ApiResp getAllMethod(@RequestParam(required = false) String service, @RequestParam(required = false) String name) {
List<Map<String, Object>> methodList = new ArrayList<>();
Method[] methods = IApiLogic.class.getMethods();
for (Method method : methods) {
Class<?>[] params = method.getParameterTypes();
if (params.length == 1 && (params[0] == ApiForm.class)) {
ApiMethod apiMethod = AnnotationUtils.getAnnotation(method, ApiMethod.class);
if (StrUtil.isNotBlank(service)) {
if (apiMethod == null || !apiMethod.service().equals(service)) {
continue;
}
}
if (StrUtil.isNotBlank(name)) {
if ((apiMethod == null || !apiMethod.value().contains(name)) && !method.getName().toLowerCase().contains(name.toLowerCase())) {
continue;
}
}
Map<String, Object> data = new HashMap<>();
data.put("value", method.getName());
data.put("name", apiMethod == null ? "" : apiMethod.value());
data.put("service", apiMethod == null ? "" : apiMethod.service());
methodList.add(data);
}
}
return ApiUtils.toApiResp(new ApiForm(), ResultVo.success(methodList));
}
}
package com.zq.api.controller;
import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;
import com.alibaba.fastjson.JSON;
import com.zq.api.constant.ApiCodeEnum;
import com.zq.api.constant.ApiMethod;
import com.zq.api.form.ApiForm;
import com.zq.api.form.ApiResp;
import com.zq.api.service.ApiService;
import com.zq.api.service.IApiLogic;
import com.zq.api.utils.ApiUtils;
import com.zq.common.utils.ThrowableUtil;
import com.zq.common.vo.ResultVo;
import feign.FeignException;
import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Api(tags = "API接口")
@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
public class ApiController {
private final ApiService apiService;
/**
* 获取信息入口
* <p>
* 2016年10月3日 下午1:38:27
*/
@RequestMapping("/action")
public ApiResp action(@RequestHeader(required = false) String appId, @RequestHeader(required = false) String appSecret, @RequestHeader(required = false) String Authorization, HttpServletRequest request) {
long start = System.currentTimeMillis();
ApiForm form = ServletUtil.toBean(request, ApiForm.class, true);
// 不处理Request Method:OPTIONS的请求
if (request.getMethod().equals("OPTIONS")) {
return ApiUtils.getSuccessResp(form);
}
form.setType(1);
String method = form.getMethod();
if (StrUtil.isBlank(method)) {
method = request.getParameter("method");
form.setMethod(method);
}
String stackTrace = "";
ApiResp resp;
try {
// 身份验证
resp = apiService.auth(form, appId, appSecret, Authorization);
if (resp.isSuccess()) {
//解析业务参数
if (!form.parseBizContent()) {
return ApiUtils.getParamError(form);
}
// 调用接口方法
resp = apiService.action(form);
}
} catch (Exception e) {
stackTrace = ThrowableUtil.getStackTrace(e);
// 判断指定异常是否来自或者包含指定异常
if (ExceptionUtil.isFromOrSuppressedThrowable(e, FeignException.Unauthorized.class)) {
resp = ApiUtils.toApiResp(form, ResultVo.fail(401, "Unauthorized"));
} else if (stackTrace.contains("Load balancer does not have available server for client")) {
resp = ApiUtils.getServiceNotAvailableError(form);
} else if (stackTrace.contains("Connection refused: connect executing")) {
resp = ApiUtils.getServiceNotAvailableError(form);
} else {
resp = ApiUtils.getMethodHandlerError(form);
}
}
// 没有数据输出空
resp = resp == null ? new ApiResp(form) : resp;
String logType = resp.isSuccess() ? "INFO" : "400".equals(resp.getCode()) ? "WARN" : "ERROR";
// 如果是500错误, 服务会返回错误的堆栈信息
if (resp.getCode().equals(ApiCodeEnum.SERVER_ERROR.code())) {
stackTrace = resp.getMsg();
resp.setMsg(ApiCodeEnum.SERVER_ERROR.msg());
}
// 调试日志
if (ApiUtils.DEBUG) {
System.out.println("API DEBUG ACTION \n[from=" + form + "]" + "\n[resp=" + JSON.toJSONString(resp) + "]" + "\n[time=" + (System.currentTimeMillis() - start) + "ms]");
}
String clientIP = ServletUtil.getClientIP(request);
apiService.addLog(form, clientIP, logType, resp.getMsg(), stackTrace, System.currentTimeMillis() - start);
return resp;
}
/**
* 开关调试日志
* <p>
* 2016年10月3日 下午5:47:46
*/
@RequestMapping("/debug")
public ApiResp debug(HttpServletRequest request) {
ApiForm from = ServletUtil.toBean(request, ApiForm.class, true);
ApiUtils.DEBUG = !ApiUtils.DEBUG;
return new ApiResp(from).setData(ApiUtils.DEBUG);
}
@RequestMapping("/method")
public ApiResp getAllMethod(@RequestParam(required = false) String service, @RequestParam(required = false) String name) {
List<Map<String, Object>> methodList = new ArrayList<>();
Method[] methods = IApiLogic.class.getMethods();
for (Method method : methods) {
Class<?>[] params = method.getParameterTypes();
if (params.length == 1 && (params[0] == ApiForm.class)) {
ApiMethod apiMethod = AnnotationUtils.getAnnotation(method, ApiMethod.class);
if (StrUtil.isNotBlank(service)) {
if (apiMethod == null || !apiMethod.service().equals(service)) {
continue;
}
}
if (StrUtil.isNotBlank(name)) {
if ((apiMethod == null || !apiMethod.value().contains(name)) && !method.getName().toLowerCase().contains(name.toLowerCase())) {
continue;
}
}
Map<String, Object> data = new HashMap<>();
data.put("value", method.getName());
data.put("name", apiMethod == null ? "" : apiMethod.value());
data.put("service", apiMethod == null ? "" : apiMethod.service());
methodList.add(data);
}
}
return ApiUtils.toApiResp(new ApiForm(), ResultVo.success(methodList));
}
}
package com.zq.api.feign;
import com.zq.api.config.FeignConfig;
import com.zq.common.vo.ResultVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@FeignClient(name = "PORTAL-SERVER", configuration = FeignConfig.class) //指定调用哪个微服务
@RequestMapping("/portal/app")
public interface PortalFeign {
@GetMapping("/area/getChildAreaList")
ResultVo getChildAreaList(@RequestParam String areaCode);
@PostMapping("/stats/getMarriageStats")
ResultVo getMarriageStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAreaUnderMarriageStatsList")
ResultVo getAreaUnderMarriageStatsList(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getFivesYearMarriageLine")
ResultVo getFivesYearMarriageLine(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAreaDisabledIssueStats")
ResultVo getAreaDisabledIssueStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getYearDisabledIssueStats")
ResultVo getYearDisabledIssueStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAreaShjzStats")
ResultVo getAreaShjzStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getFivesYearShjzAchieveStats")
ResultVo getFivesYearShjzAchieveStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getFivesYearShjzProvideStats")
ResultVo getFivesYearShjzProvideStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getSoorganStats")
ResultVo getSoorganStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAreaUnderSoorganStatsList")
ResultVo getAreaUnderSoorganStatsList(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAppMapStats")
ResultVo getAppMapStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/gatherSearch")
ResultVo gatherSearch(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAgencyChildStats")
ResultVo getAgencyChildStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAgencyChildStatsList")
ResultVo getAgencyChildStatsList(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getCremationStats")
ResultVo getCremationStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getCremationStatsList")
ResultVo getCremationStatsList(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getCremationStatsById")
ResultVo getCremationStatsById(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAreaUnderNumStats")
ResultVo getAreaUnderNumStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getEnjoySubsidyStats")
ResultVo getEnjoySubsidyStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getEnjoySumStatsData")
ResultVo getEnjoySumStatsData(@RequestBody Map<String, Object> paramsMap);
}
package com.zq.api.feign;
import com.zq.api.config.FeignConfig;
import com.zq.common.vo.ResultVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@FeignClient(name = "PORTAL-SERVER", configuration = FeignConfig.class) //指定调用哪个微服务
@RequestMapping("/portal/app")
public interface PortalFeign {
@GetMapping("/area/getChildAreaList")
ResultVo getChildAreaList(@RequestParam String areaCode);
@PostMapping("/stats/getMarriageStats")
ResultVo getMarriageStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getYearMarriedCouple")
ResultVo getYearMarriedCouple(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAreaUnderMarriageStatsList")
ResultVo getAreaUnderMarriageStatsList(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getFivesYearMarriageLine")
ResultVo getFivesYearMarriageLine(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAreaDisabledIssueStats")
ResultVo getAreaDisabledIssueStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getYearDisabledIssueStats")
ResultVo getYearDisabledIssueStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAreaShjzStats")
ResultVo getAreaShjzStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getFivesYearShjzAchieveStats")
ResultVo getFivesYearShjzAchieveStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getFivesYearShjzProvideStats")
ResultVo getFivesYearShjzProvideStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getSoorganStats")
ResultVo getSoorganStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAreaUnderSoorganStatsList")
ResultVo getAreaUnderSoorganStatsList(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAppMapStats")
ResultVo getAppMapStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/gatherSearch")
ResultVo gatherSearch(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAgencyChildStats")
ResultVo getAgencyChildStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAgencyChildStatsList")
ResultVo getAgencyChildStatsList(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getCremationStats")
ResultVo getCremationStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getCremationStatsList")
ResultVo getCremationStatsList(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getCremationStatsById")
ResultVo getCremationStatsById(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getAreaUnderNumStats")
ResultVo getAreaUnderNumStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getEnjoySubsidyStats")
ResultVo getEnjoySubsidyStats(@RequestBody Map<String, Object> paramsMap);
@PostMapping("/stats/getEnjoySumStatsData")
ResultVo getEnjoySumStatsData(@RequestBody Map<String, Object> paramsMap);
}
package com.zq.api.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import com.zq.api.dao.ApiLogDao;
import com.zq.api.entity.ApiLog;
import com.zq.api.entity.ApiUser;
import com.zq.api.feign.SysFeign;
import com.zq.api.form.ApiForm;
import com.zq.api.form.ApiResp;
import com.zq.api.utils.ApiUtils;
import com.zq.api.utils.ReflectionUtils;
import com.zq.common.config.redis.RedisUtils;
import com.zq.common.vo.ApiTokenVo;
import com.zq.common.vo.ResultVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author wilmiam
* @since 2021-09-28 15:44
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class ApiService {
private final ApiLogDao apiLogDao;
private final SysFeign sysFeign;
private final RedisUtils redisUtils;
/**
* 允许用户未登录状态下执行的方法名
*/
private final String[] allowMethod = {"sendCode", "resetPassword", "phoneLogin", "passwdLogin", "getAppVersion","cremationSearch","marriageSearch","naturalPersonSearch"};
private static final List<String> METHOD_LIST;
static {
METHOD_LIST = methodList();
}
public IApiLogic getApiLogic(ApiForm form) {
IApiLogic apiLogic = ApiUtils.getApiLogic(form);
return apiLogic;
}
public static List<String> methodList() {
List<String> methodList = new ArrayList<>();
Method[] methods = IApiLogic.class.getMethods();
for (Method method : methods) {
Class<?>[] params = method.getParameterTypes();
if (params.length == 1 && (params[0] == ApiForm.class)) {
methodList.add(method.getName());
}
}
return methodList;
}
public ApiResp action(ApiForm form) throws Exception {
if (!METHOD_LIST.contains(form.getMethod())) {
return ApiUtils.getMethodError(form);
}
// 调用接口方法,利用反射更简洁
IApiLogic apiLogic = getApiLogic(form);
return (ApiResp) ReflectionUtils.invokeMethod(apiLogic, form.getMethod(), new Class<?>[]{ApiForm.class}, new Object[]{form});
}
/**
* 身份验证
*
* @param form
* @param appId
* @param appSecret
* @return
*/
public ApiResp auth(ApiForm form, String appId, String appSecret, String token) {
boolean contains = Arrays.asList(allowMethod).contains(form.getMethod());
if (contains) {
return ApiUtils.getSuccessResp(form);
} else if (StrUtil.isBlank(token)) {
return ApiUtils.getLoginValidError(form);
}
ResultVo resultVo = sysFeign.getApiUserByAppId(appId, appSecret);
if (!resultVo.isSuccess() || resultVo.getData() == null) {
return ApiUtils.getAppIdValidError(form);
}
// 认证签名
String key = redisUtils.getStr("civil.apiKey." + token);
String sign = ApiUtils.getSign(form.getSignStr(key == null ? "" : key));
if (!sign.equals(form.getSign())) {
return ApiUtils.getCheckSignValidError(form);
}
ApiUser apiUser = BeanUtil.copyProperties(resultVo.getData(), ApiUser.class);
ApiTokenVo apiTokenVo = ApiTokenVo.builder()
.userId(apiUser.getId())
.name(apiUser.getName())
.roleLevel(apiUser.getRoleLevel())
.build();
form.setUserId(apiUser.getId() == null ? null : apiUser.getId().toString());
form.setAppId(apiUser.getAppId());
form.setApiTokenVo(apiTokenVo);
return ApiUtils.getSuccessResp(form);
}
@Async
public void addLog(ApiForm form, String ip, String logType, String respMsg, String errorInfo, Long timeCost) {
apiLogDao.insert(ApiLog.builder()
.appId(form.getAppId())
.userId(form.getUserId())
.method(form.getMethod())
.version(form.getVersion())
.bizContent(form.getBizContent())
.ip(ip)
.logType(logType)
.respMsg(respMsg)
.stackTrace(errorInfo)
.timeCost(timeCost)
.createTime(DateUtil.date().toJdkDate())
.build());
}
}
package com.zq.api.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import com.zq.api.dao.ApiLogDao;
import com.zq.api.entity.ApiLog;
import com.zq.api.entity.ApiUser;
import com.zq.api.feign.SysFeign;
import com.zq.api.form.ApiForm;
import com.zq.api.form.ApiResp;
import com.zq.api.utils.ApiUtils;
import com.zq.api.utils.ReflectionUtils;
import com.zq.common.config.redis.RedisUtils;
import com.zq.common.vo.ApiTokenVo;
import com.zq.common.vo.ResultVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author wilmiam
* @since 2021-09-28 15:44
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class ApiService {
private final ApiLogDao apiLogDao;
private final SysFeign sysFeign;
private final RedisUtils redisUtils;
/**
* 允许用户未登录状态下执行的方法名
*/
private final String[] allowMethod = {"sendCode", "resetPassword", "phoneLogin", "passwdLogin", "getAppVersion","cremationSearch","marriageSearch","naturalPersonSearch"};
private static final List<String> METHOD_LIST;
static {
METHOD_LIST = methodList();
}
public IApiLogic getApiLogic(ApiForm form) {
IApiLogic apiLogic = ApiUtils.getApiLogic(form);
return apiLogic;
}
public static List<String> methodList() {
List<String> methodList = new ArrayList<>();
Method[] methods = IApiLogic.class.getMethods();
for (Method method : methods) {
Class<?>[] params = method.getParameterTypes();
if (params.length == 1 && (params[0] == ApiForm.class)) {
methodList.add(method.getName());
}
}
return methodList;
}
public ApiResp action(ApiForm form) throws Exception {
if (!METHOD_LIST.contains(form.getMethod())) {
return ApiUtils.getMethodError(form);
}
// 调用接口方法,利用反射更简洁
IApiLogic apiLogic = getApiLogic(form);
return (ApiResp) ReflectionUtils.invokeMethod(apiLogic, form.getMethod(), new Class<?>[]{ApiForm.class}, new Object[]{form});
}
/**
* 身份验证
*
* @param form
* @param appId
* @param appSecret
* @return
*/
public ApiResp auth(ApiForm form, String appId, String appSecret, String token) {
boolean contains = Arrays.asList(allowMethod).contains(form.getMethod());
if (contains) {
return ApiUtils.getSuccessResp(form);
} else if (StrUtil.isBlank(token)) {
return ApiUtils.getLoginValidError(form);
}
ResultVo resultVo = sysFeign.getApiUserByAppId(appId, appSecret);
if (!resultVo.isSuccess() || resultVo.getData() == null) {
return ApiUtils.getAppIdValidError(form);
}
// 认证签名
String key = redisUtils.getStr("civil.apiKey." + token);
String sign = ApiUtils.getSign(form.getSignStr(key == null ? "" : key));
if (!sign.equals(form.getSign())) {
return ApiUtils.getCheckSignValidError(form);
}
ApiUser apiUser = BeanUtil.copyProperties(resultVo.getData(), ApiUser.class);
ApiTokenVo apiTokenVo = ApiTokenVo.builder()
.userId(apiUser.getId())
.name(apiUser.getName())
.roleLevel(apiUser.getRoleLevel())
.build();
form.setUserId(apiUser.getId() == null ? null : apiUser.getId().toString());
form.setAppId(apiUser.getAppId());
form.setApiTokenVo(apiTokenVo);
return ApiUtils.getSuccessResp(form);
}
@Async
public void addLog(ApiForm form, String ip, String logType, String respMsg, String errorInfo, Long timeCost) {
apiLogDao.insert(ApiLog.builder()
.appId(form.getAppId())
.userId(form.getUserId())
.method(form.getMethod())
.version(form.getVersion())
.bizContent(form.getBizContent())
.ip(ip)
.logType(logType)
.respMsg(respMsg)
.stackTrace(errorInfo)
.timeCost(timeCost)
.createTime(DateUtil.date().toJdkDate())
.build());
}
}
package com.zq.api.service;
import com.zq.api.constant.ApiMethod;
import com.zq.api.form.ApiForm;
import com.zq.api.form.ApiResp;
/**
* api实现接口
* <p>
* 2016年9月29日 上午11:45:08
*/
public interface IApiLogic extends IApiCommon {
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓SYS APP接口↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
@ApiMethod(name = "获取用户信息", service = "SYS-SERVER")
ApiResp getUserInfo(ApiForm form);
@ApiMethod(name = "发送验证码", service = "SYS-SERVER")
ApiResp sendCode(ApiForm form);
@ApiMethod(name = "重置密码", service = "SYS-SERVER")
ApiResp resetPassword(ApiForm form);
@ApiMethod(name = "用户手机号登录", service = "SYS-SERVER")
ApiResp phoneLogin(ApiForm form);
@ApiMethod(name = "密码登录", service = "SYS-SERVER")
ApiResp passwdLogin(ApiForm form);
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓门户接口↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
@ApiMethod(name = "获取婚姻统计", service = "PORTAL-SERVER")
ApiResp getMarriageStats(ApiForm form);
@ApiMethod(name = "获取区域下的婚姻统计列表", service = "PORTAL-SERVER")
ApiResp getAreaUnderMarriageStatsList(ApiForm form);
@ApiMethod(name = "获取近5年婚姻走势", service = "PORTAL-SERVER")
ApiResp getFivesYearMarriageLine(ApiForm form);
@ApiMethod(name = "获取区域残疾发放统计", service = "PORTAL-SERVER")
ApiResp getAreaDisabledIssueStats(ApiForm form);
@ApiMethod(name = "近五年发放人数和金额统计", service = "PORTAL-SERVER")
ApiResp getYearDisabledIssueStats(ApiForm form);
@ApiMethod(name = "获取在享补贴统计", service = "PORTAL-SERVER")
ApiResp getEnjoySubsidyStats(ApiForm form);
@ApiMethod(name = "获取区域统计列表", service = "PORTAL-SERVER")
ApiResp getAreaShjzStats(ApiForm form);
@ApiMethod(name = "获取区域社会救助统计列表", service = "PORTAL-SERVER")
ApiResp getAreaUnderNumStats(ApiForm form);
@ApiMethod(name = "获取近五年城市农村低保发放人数统计", service = "PORTAL-SERVER")
ApiResp getFivesYearShjzAchieveStats(ApiForm form);
@ApiMethod(name = "获取近五年城市农村低保发放金额统计", service = "PORTAL-SERVER")
ApiResp getFivesYearShjzProvideStats(ApiForm form);
@ApiMethod(name = "修改登录密码", service = "PORTAL-SERVER")
ApiResp modifyPasswd(ApiForm form);
@ApiMethod(name = "获取App最新版本", service = "PORTAL-SERVER")
ApiResp getAppVersion(ApiForm form);
@ApiMethod(name = "获取子区域列表", service = "PORTAL-SERVER")
ApiResp getChildAreaList(ApiForm form);
@ApiMethod(name = "获取社会机构统计", service = "PORTAL-SERVER")
ApiResp getSoorganStats(ApiForm form);
@ApiMethod(name = "获取地区下面社会机构统计列表", service = "PORTAL-SERVER")
ApiResp getAreaUnderSoorganStatsList(ApiForm form);
@ApiMethod(name = "获取App首页地图数据", service = "PORTAL-SERVER")
ApiResp getAppMapStats(ApiForm form);
@ApiMethod(name = "汇总搜索", service = "PORTAL-SERVER")
ApiResp gatherSearch(ApiForm form);
@ApiMethod(name = "指定区域下的儿童福利数据统计", service = "PORTAL-SERVER")
ApiResp getAgencyChildStats(ApiForm form);
@ApiMethod(name = "指定区域下级区域的儿童福利数据统计列表", service = "PORTAL-SERVER")
ApiResp getAgencyChildStatsList(ApiForm form);
@ApiMethod(name = "火化量统计", service = "PORTAL-SERVER")
ApiResp getCremationStats(ApiForm form);
@ApiMethod(name = "火化量统计列表", service = "PORTAL-SERVER")
ApiResp getCremationStatsList(ApiForm form);
@ApiMethod(name = "殡仪馆火化量统计列表", service = "PORTAL-SERVER")
ApiResp getCremationStatsById(ApiForm form);
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓SYS单点登录接口↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
@ApiMethod(name = "获取单点登录用户信息", service = "SYS-SERVER")
ApiResp getSsoUserInfo(ApiForm form);
@ApiMethod(name = "单点登出", service = "SYS-SERVER")
ApiResp ssoLogout(ApiForm form);
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓开放接口↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
@ApiMethod(name = "婚姻搜索接口", service = "OPEN-SERVER")
ApiResp marriageSearch(ApiForm form);
@ApiMethod(name = "自然人搜索接口", service = "OPEN-SERVER")
ApiResp naturalPersonSearch(ApiForm form);
@ApiMethod(name = "火化搜索接口", service = "OPEN-SERVER")
ApiResp cremationSearch(ApiForm form);
}
package com.zq.api.service;
import com.zq.api.constant.ApiMethod;
import com.zq.api.form.ApiForm;
import com.zq.api.form.ApiResp;
/**
* api实现接口
* <p>
* 2016年9月29日 上午11:45:08
*/
public interface IApiLogic extends IApiCommon {
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓SYS APP接口↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
@ApiMethod(name = "获取用户信息", service = "SYS-SERVER")
ApiResp getUserInfo(ApiForm form);
@ApiMethod(name = "发送验证码", service = "SYS-SERVER")
ApiResp sendCode(ApiForm form);
@ApiMethod(name = "重置密码", service = "SYS-SERVER")
ApiResp resetPassword(ApiForm form);
@ApiMethod(name = "用户手机号登录", service = "SYS-SERVER")
ApiResp phoneLogin(ApiForm form);
@ApiMethod(name = "密码登录", service = "SYS-SERVER")
ApiResp passwdLogin(ApiForm form);
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓门户接口↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
@ApiMethod(name = "获取婚姻统计", service = "PORTAL-SERVER")
ApiResp getMarriageStats(ApiForm form);
@ApiMethod(name = "获取1年结婚离婚对数", service = "PORTAL-SERVER")
ApiResp getYearMarriedCouple(ApiForm form);
@ApiMethod(name = "获取区域下的婚姻统计列表", service = "PORTAL-SERVER")
ApiResp getAreaUnderMarriageStatsList(ApiForm form);
@ApiMethod(name = "获取近5年婚姻走势", service = "PORTAL-SERVER")
ApiResp getFivesYearMarriageLine(ApiForm form);
@ApiMethod(name = "获取区域残疾发放统计", service = "PORTAL-SERVER")
ApiResp getAreaDisabledIssueStats(ApiForm form);
@ApiMethod(name = "近五年发放人数和金额统计", service = "PORTAL-SERVER")
ApiResp getYearDisabledIssueStats(ApiForm form);
@ApiMethod(name = "获取在享补贴统计", service = "PORTAL-SERVER")
ApiResp getEnjoySubsidyStats(ApiForm form);
@ApiMethod(name = "获取区域统计列表", service = "PORTAL-SERVER")
ApiResp getAreaShjzStats(ApiForm form);
@ApiMethod(name = "获取区域社会救助统计列表", service = "PORTAL-SERVER")
ApiResp getAreaUnderNumStats(ApiForm form);
@ApiMethod(name = "获取近五年城市农村低保发放人数统计", service = "PORTAL-SERVER")
ApiResp getFivesYearShjzAchieveStats(ApiForm form);
@ApiMethod(name = "获取近五年城市农村低保发放金额统计", service = "PORTAL-SERVER")
ApiResp getFivesYearShjzProvideStats(ApiForm form);
@ApiMethod(name = "修改登录密码", service = "PORTAL-SERVER")
ApiResp modifyPasswd(ApiForm form);
@ApiMethod(name = "获取App最新版本", service = "PORTAL-SERVER")
ApiResp getAppVersion(ApiForm form);
@ApiMethod(name = "获取子区域列表", service = "PORTAL-SERVER")
ApiResp getChildAreaList(ApiForm form);
@ApiMethod(name = "获取社会机构统计", service = "PORTAL-SERVER")
ApiResp getSoorganStats(ApiForm form);
@ApiMethod(name = "获取地区下面社会机构统计列表", service = "PORTAL-SERVER")
ApiResp getAreaUnderSoorganStatsList(ApiForm form);
@ApiMethod(name = "获取App首页地图数据", service = "PORTAL-SERVER")
ApiResp getAppMapStats(ApiForm form);
@ApiMethod(name = "汇总搜索", service = "PORTAL-SERVER")
ApiResp gatherSearch(ApiForm form);
@ApiMethod(name = "指定区域下的儿童福利数据统计", service = "PORTAL-SERVER")
ApiResp getAgencyChildStats(ApiForm form);
@ApiMethod(name = "指定区域下级区域的儿童福利数据统计列表", service = "PORTAL-SERVER")
ApiResp getAgencyChildStatsList(ApiForm form);
@ApiMethod(name = "火化量统计", service = "PORTAL-SERVER")
ApiResp getCremationStats(ApiForm form);
@ApiMethod(name = "火化量统计列表", service = "PORTAL-SERVER")
ApiResp getCremationStatsList(ApiForm form);
@ApiMethod(name = "殡仪馆火化量统计列表", service = "PORTAL-SERVER")
ApiResp getCremationStatsById(ApiForm form);
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓SYS单点登录接口↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
@ApiMethod(name = "获取单点登录用户信息", service = "SYS-SERVER")
ApiResp getSsoUserInfo(ApiForm form);
@ApiMethod(name = "单点登出", service = "SYS-SERVER")
ApiResp ssoLogout(ApiForm form);
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓开放接口↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
@ApiMethod(name = "婚姻搜索接口", service = "OPEN-SERVER")
ApiResp marriageSearch(ApiForm form);
@ApiMethod(name = "自然人搜索接口", service = "OPEN-SERVER")
ApiResp naturalPersonSearch(ApiForm form);
@ApiMethod(name = "火化搜索接口", service = "OPEN-SERVER")
ApiResp cremationSearch(ApiForm form);
}
package com.zq.api.service.impl;
import com.zq.api.feign.OpenFeign;
import com.zq.api.feign.PortalFeign;
import com.zq.api.feign.SysFeign;
import com.zq.api.form.ApiForm;
import com.zq.api.form.ApiResp;
import com.zq.api.service.IApiLogic;
import com.zq.api.utils.ApiUtils;
import com.zq.common.config.security.ApiTokenUtils;
import com.zq.common.vo.ApiTokenVo;
import com.zq.common.vo.ResultVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class ApiV100Logic extends BaseApiLogic implements IApiLogic {
@Autowired
private SysFeign sysFeign;
@Autowired
private PortalFeign portalFeign;
@Autowired
private OpenFeign openFeign;
@Override
public ApiResp getUserInfo(ApiForm form) {
return ApiUtils.toApiResp(form, ResultVo.success(ApiTokenUtils.getAppTokenVo(form.getToken())));
}
@Override
public ApiResp sendCode(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.sendCode(form.getString("phone")));
}
@Override
public ApiResp resetPassword(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.resetPassword(form.getParamsMap()));
}
@Override
public ApiResp phoneLogin(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.phoneLogin(form.getParamsMap()));
}
@Override
public ApiResp passwdLogin(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.passwdLogin(form.getParamsMap()));
}
@Override
public ApiResp modifyPasswd(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.modifyPasswd(form.getParamsMap()));
}
@Override
public ApiResp getAppVersion(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.getAppVersion(form.getString("appName")));
}
@Override
public ApiResp getChildAreaList(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getChildAreaList(form.getString("areaCode")));
}
@Override
public ApiResp getMarriageStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getMarriageStats(form.getParamsMap()));
}
@Override
public ApiResp getAreaUnderMarriageStatsList(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAreaUnderMarriageStatsList(form.getParamsMap()));
}
@Override
public ApiResp getFivesYearMarriageLine(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getFivesYearMarriageLine(form.getParamsMap()));
}
@Override
public ApiResp getAreaDisabledIssueStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAreaDisabledIssueStats(form.getParamsMap()));
}
@Override
public ApiResp getYearDisabledIssueStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getYearDisabledIssueStats(form.getParamsMap()));
}
@Override
public ApiResp getEnjoySubsidyStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getEnjoySubsidyStats(form.getParamsMap()));
}
@Override
public ApiResp getAreaShjzStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAreaShjzStats(form.getParamsMap()));
}
@Override
public ApiResp getAreaUnderNumStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAreaUnderNumStats(form.getParamsMap()));
}
@Override
public ApiResp getFivesYearShjzAchieveStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getFivesYearShjzAchieveStats(form.getParamsMap()));
}
@Override
public ApiResp getFivesYearShjzProvideStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getFivesYearShjzProvideStats(form.getParamsMap()));
}
@Override
public ApiResp getSoorganStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getSoorganStats(form.getParamsMap()));
}
@Override
public ApiResp getAreaUnderSoorganStatsList(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAreaUnderSoorganStatsList(form.getParamsMap()));
}
@Override
public ApiResp getAppMapStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAppMapStats(form.getParamsMap()));
}
@Override
public ApiResp gatherSearch(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.gatherSearch(form.getParamsMap()));
}
@Override
public ApiResp getAgencyChildStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAgencyChildStats(form.getParamsMap()));
}
@Override
public ApiResp getAgencyChildStatsList(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAgencyChildStatsList(form.getParamsMap()));
}
@Override
public ApiResp getCremationStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getCremationStats(form.getParamsMap()));
}
@Override
public ApiResp getCremationStatsList(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getCremationStatsList(form.getParamsMap()));
}
@Override
public ApiResp getCremationStatsById(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getCremationStatsById(form.getParamsMap()));
}
@Override
public ApiResp getSsoUserInfo(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.getSsoUserInfo(form.getAppId()));
}
@Override
public ApiResp ssoLogout(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.ssoLogout());
}
@Override
public ApiResp marriageSearch(ApiForm form) {
Map<String, Object> paramsMap = form.getParamsMap();
ApiTokenVo apiTokenVo = form.getApiTokenVo();
if (apiTokenVo != null && apiTokenVo.getRoleLevel() == 1) {
paramsMap.put("queryType", 1);
}
return ApiUtils.toApiResp(form, openFeign.marriageSearch(paramsMap));
}
@Override
public ApiResp naturalPersonSearch(ApiForm form) {
return ApiUtils.toApiResp(form, openFeign.naturalPersonSearch(form.getParamsMap()));
}
@Override
public ApiResp cremationSearch(ApiForm form) {
return ApiUtils.toApiResp(form, openFeign.cremationSearch(form.getParamsMap()));
}
}
package com.zq.api.service.impl;
import com.zq.api.feign.OpenFeign;
import com.zq.api.feign.PortalFeign;
import com.zq.api.feign.SysFeign;
import com.zq.api.form.ApiForm;
import com.zq.api.form.ApiResp;
import com.zq.api.service.IApiLogic;
import com.zq.api.utils.ApiUtils;
import com.zq.common.config.security.ApiTokenUtils;
import com.zq.common.vo.ApiTokenVo;
import com.zq.common.vo.ResultVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class ApiV100Logic extends BaseApiLogic implements IApiLogic {
@Autowired
private SysFeign sysFeign;
@Autowired
private PortalFeign portalFeign;
@Autowired
private OpenFeign openFeign;
@Override
public ApiResp getUserInfo(ApiForm form) {
return ApiUtils.toApiResp(form, ResultVo.success(ApiTokenUtils.getAppTokenVo(form.getToken())));
}
@Override
public ApiResp sendCode(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.sendCode(form.getString("phone")));
}
@Override
public ApiResp resetPassword(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.resetPassword(form.getParamsMap()));
}
@Override
public ApiResp phoneLogin(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.phoneLogin(form.getParamsMap()));
}
@Override
public ApiResp passwdLogin(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.passwdLogin(form.getParamsMap()));
}
@Override
public ApiResp modifyPasswd(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.modifyPasswd(form.getParamsMap()));
}
@Override
public ApiResp getAppVersion(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.getAppVersion(form.getString("appName")));
}
@Override
public ApiResp getChildAreaList(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getChildAreaList(form.getString("areaCode")));
}
@Override
public ApiResp getMarriageStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getMarriageStats(form.getParamsMap()));
}
@Override
public ApiResp getYearMarriedCouple(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getYearMarriedCouple(form.getParamsMap()));
}
@Override
public ApiResp getAreaUnderMarriageStatsList(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAreaUnderMarriageStatsList(form.getParamsMap()));
}
@Override
public ApiResp getFivesYearMarriageLine(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getFivesYearMarriageLine(form.getParamsMap()));
}
@Override
public ApiResp getAreaDisabledIssueStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAreaDisabledIssueStats(form.getParamsMap()));
}
@Override
public ApiResp getYearDisabledIssueStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getYearDisabledIssueStats(form.getParamsMap()));
}
@Override
public ApiResp getEnjoySubsidyStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getEnjoySubsidyStats(form.getParamsMap()));
}
@Override
public ApiResp getAreaShjzStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAreaShjzStats(form.getParamsMap()));
}
@Override
public ApiResp getAreaUnderNumStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAreaUnderNumStats(form.getParamsMap()));
}
@Override
public ApiResp getFivesYearShjzAchieveStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getFivesYearShjzAchieveStats(form.getParamsMap()));
}
@Override
public ApiResp getFivesYearShjzProvideStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getFivesYearShjzProvideStats(form.getParamsMap()));
}
@Override
public ApiResp getSoorganStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getSoorganStats(form.getParamsMap()));
}
@Override
public ApiResp getAreaUnderSoorganStatsList(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAreaUnderSoorganStatsList(form.getParamsMap()));
}
@Override
public ApiResp getAppMapStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAppMapStats(form.getParamsMap()));
}
@Override
public ApiResp gatherSearch(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.gatherSearch(form.getParamsMap()));
}
@Override
public ApiResp getAgencyChildStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAgencyChildStats(form.getParamsMap()));
}
@Override
public ApiResp getAgencyChildStatsList(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getAgencyChildStatsList(form.getParamsMap()));
}
@Override
public ApiResp getCremationStats(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getCremationStats(form.getParamsMap()));
}
@Override
public ApiResp getCremationStatsList(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getCremationStatsList(form.getParamsMap()));
}
@Override
public ApiResp getCremationStatsById(ApiForm form) {
return ApiUtils.toApiResp(form, portalFeign.getCremationStatsById(form.getParamsMap()));
}
@Override
public ApiResp getSsoUserInfo(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.getSsoUserInfo(form.getAppId()));
}
@Override
public ApiResp ssoLogout(ApiForm form) {
return ApiUtils.toApiResp(form, sysFeign.ssoLogout());
}
@Override
public ApiResp marriageSearch(ApiForm form) {
Map<String, Object> paramsMap = form.getParamsMap();
ApiTokenVo apiTokenVo = form.getApiTokenVo();
if (apiTokenVo != null && apiTokenVo.getRoleLevel() == 1) {
paramsMap.put("queryType", 1);
}
return ApiUtils.toApiResp(form, openFeign.marriageSearch(paramsMap));
}
@Override
public ApiResp naturalPersonSearch(ApiForm form) {
return ApiUtils.toApiResp(form, openFeign.naturalPersonSearch(form.getParamsMap()));
}
@Override
public ApiResp cremationSearch(ApiForm form) {
return ApiUtils.toApiResp(form, openFeign.cremationSearch(form.getParamsMap()));
}
}
package com.zq.portal.controller.app;
import com.zq.common.vo.ResultVo;
import com.zq.portal.entity.VMarriageStats;
import com.zq.portal.service.HyStatsService;
import com.zq.portal.vo.StatsReqVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "婚姻相关接口")
@RequiredArgsConstructor
@RestController
@RequestMapping(value = "/portal/app/stats")
public class HyStatsController {
public final HyStatsService hyStatsService;
@ApiOperation("获取结婚离婚人数")
@PostMapping(value = "/getMarriageStats")
public ResultVo<VMarriageStats> getMarriageStats(@RequestBody StatsReqVo vo) {
return ResultVo.success(hyStatsService.getCacheMarriageStats(vo));
}
@ApiOperation("获取地区下面婚姻统计列表")
@PostMapping(value = "/getAreaUnderMarriageStatsList")
public ResultVo getAreaUnderMarriageStatsList(@RequestBody StatsReqVo vo) {
return ResultVo.success(hyStatsService.getCacheAreaUnderMarriageStatsList(vo));
}
@ApiOperation("获取近5年结婚离婚走势")
@PostMapping(value = "/getFivesYearMarriageLine")
public ResultVo getFivesYearMarriageLine(@RequestBody StatsReqVo vo) {
return ResultVo.success(hyStatsService.getCacheFivesYearMarriageLine(vo));
}
}
package com.zq.portal.controller.app;
import com.zq.common.vo.ResultVo;
import com.zq.portal.entity.VMarriageStats;
import com.zq.portal.service.HyStatsService;
import com.zq.portal.vo.StatsReqVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "婚姻相关接口")
@RequiredArgsConstructor
@RestController
@RequestMapping(value = "/portal/app/stats")
public class HyStatsController {
public final HyStatsService hyStatsService;
@ApiOperation("获取结婚离婚人数")
@PostMapping(value = "/getMarriageStats")
public ResultVo<VMarriageStats> getMarriageStats(@RequestBody StatsReqVo vo) {
return ResultVo.success(hyStatsService.getCacheMarriageStats(vo));
}
@ApiOperation("获取地区下面婚姻统计列表")
@PostMapping(value = "/getAreaUnderMarriageStatsList")
public ResultVo getAreaUnderMarriageStatsList(@RequestBody StatsReqVo vo) {
return ResultVo.success(hyStatsService.getCacheAreaUnderMarriageStatsList(vo));
}
@ApiOperation("获取近5年结婚离婚走势")
@PostMapping(value = "/getFivesYearMarriageLine")
public ResultVo getFivesYearMarriageLine(@RequestBody StatsReqVo vo) {
return ResultVo.success(hyStatsService.getCacheFivesYearMarriageLine(vo));
}
@ApiOperation("获取1年结婚离婚对数")
@PostMapping(value = "/getYearMarriedCouple")
public ResultVo getYearMarriedCouple(@RequestBody StatsReqVo vo) {
return ResultVo.success(hyStatsService.getCacheYearMarriedCouple(vo));
}
}
package com.zq.portal.dao;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.zq.common.constant.DBName;
import com.zq.portal.vo.SearchReqVo;
import com.zq.portal.vo.StatsReqVo;
import com.zq.portal.vo.StatsVo;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@DS(DBName.GXHY)
@Repository
public interface HyStatsDao {
/**
* 获取近5年的折线
*
* @return
*/
List<StatsVo> getFivesYearMarriageLine(StatsReqVo vo);
/**
* 月统计折线
*
* @return
*/
List<StatsVo> getMonthMarriageLine(StatsReqVo vo);
/**
* 获取结婚离婚人数
*
* @param vo
* @return
*/
List<StatsVo> getMarriageStats(StatsReqVo vo);
/**
* 获取下级区域婚姻统计列表
*
* @param vo
* @return
*/
List<StatsVo> getAreaUnderMarriageStatsList(StatsReqVo vo);
/**
* 获取跨地结婚离婚人数
*
* @param vo
* @return
*/
List<StatsVo> getCrossMarriageStats(StatsReqVo vo);
// 获取结婚人数
StatsVo getMarryNum(StatsReqVo vo);
// 获取离婚中的人数
StatsVo getInDivorceNum(StatsReqVo vo);
// 获取每月冷静期数据
List<StatsVo> getMonthDivorceCoolingData(StatsReqVo vo);
/**
* 搜索
*
* @param vo
* @return
*/
List<Map<String, Object>> search(SearchReqVo vo);
}
package com.zq.portal.dao;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.zq.common.constant.DBName;
import com.zq.portal.vo.SearchReqVo;
import com.zq.portal.vo.StatsReqVo;
import com.zq.portal.vo.StatsVo;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@DS(DBName.GXHY)
@Repository
public interface HyStatsDao {
/**
* 获取近5年的折线
*
* @return
*/
List<StatsVo> getFivesYearMarriageLine(StatsReqVo vo);
/**
* 月统计折线
*
* @return
*/
List<StatsVo> getMonthMarriageLine(StatsReqVo vo);
/**
* 获取结婚离婚人数
*
* @param vo
* @return
*/
List<StatsVo> getMarriageStats(StatsReqVo vo);
/**
* 获取下级区域婚姻统计列表
*
* @param vo
* @return
*/
List<StatsVo> getAreaUnderMarriageStatsList(StatsReqVo vo);
/**
* 获取跨地结婚离婚人数
*
* @param vo
* @return
*/
List<StatsVo> getCrossMarriageStats(StatsReqVo vo);
// 获取结婚人数
StatsVo getMarryNum(StatsReqVo vo);
// 获取离婚中的人数
StatsVo getInDivorceNum(StatsReqVo vo);
// 获取每月冷静期数据
List<StatsVo> getMonthDivorceCoolingData(StatsReqVo vo);
/**
* 搜索
*
* @param vo
* @return
*/
List<Map<String, Object>> search(SearchReqVo vo);
/**
* 获取结婚离婚对数
*
* @param vo
* @return
*/
List<StatsVo> getYearMarriedCouple(StatsReqVo vo);
}
package com.zq.portal.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 地区婚姻统计(VMarriageStats)实体类
*
* @author makejava
* @since 2021-06-24 11:57:43
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName(value = "v_marriage_stats")
public class VMarriageStats {
/**
* id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 区域码
*/
@ApiModelProperty("区域码")
private String areaCode;
/**
* 区域名
*/
@ApiModelProperty("区域名")
private String areaName;
/**
* 年份
*/
@ApiModelProperty("年份")
private Integer year;
/**
* 结婚人数
*/
@ApiModelProperty("结婚人数")
private Integer marryNum;
/**
* 申请离婚人数
*/
@ApiModelProperty("申请离婚人数")
private Integer inDivorceNum;
/**
* 离婚成功
*/
@ApiModelProperty("离婚成功")
private Integer divorceNum;
/**
* 跨地区结婚人数
*/
@ApiModelProperty("跨地区结婚人数")
private Integer crossMarryNum;
/**
* 跨地区离婚人数
*/
@ApiModelProperty("跨地区离婚人数")
private Integer crossDivorceNum;
/**
* 跨地区结婚人数
*/
@ApiModelProperty("补领结婚证人数")
private Integer patchMarryCaNum;
/**
* 补领离婚证人数
*/
@ApiModelProperty("补领离婚证人数")
private Integer patchDivorceCaNum;
/**
* createTime
*/
private Date createTime;
}
package com.zq.portal.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 地区婚姻统计(VMarriageStats)实体类
*
* @author makejava
* @since 2021-06-24 11:57:43
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName(value = "v_marriage_stats")
public class VMarriageStats {
/**
* id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 区域码
*/
@ApiModelProperty("区域码")
private String areaCode;
/**
* 区域名
*/
@ApiModelProperty("区域名")
private String areaName;
/**
* 年份
*/
@ApiModelProperty("年份")
private Integer year;
/**
* 结婚人数
*/
@ApiModelProperty("结婚人数")
private Integer marryNum;
/**
* 申请离婚人数
*/
@ApiModelProperty("申请离婚人数")
private Integer inDivorceNum;
/**
* 离婚成功
*/
@ApiModelProperty("离婚成功")
private Integer divorceNum;
/**
* 跨地区结婚人数
*/
@ApiModelProperty("跨地区结婚人数")
private Integer crossMarryNum;
/**
* 跨地区离婚人数
*/
@ApiModelProperty("跨地区离婚人数")
private Integer crossDivorceNum;
/**
* 跨地区结婚人数
*/
@ApiModelProperty("补领结婚证人数")
private Integer patchMarryCaNum;
/**
* 补领离婚证人数
*/
@ApiModelProperty("补领离婚证人数")
private Integer patchDivorceCaNum;
/**
* createTime
*/
private Date createTime;
}
package com.zq.portal.manager;
import com.zq.portal.vo.StatsReqVo;
public abstract class PortalCacheKeys {
public static final String PREFIX = "portal.";
// 获取婚姻统计列表key
public static String getAreaUnderMarriageStatsListKey(StatsReqVo vo) {
return PREFIX + "getAreaUnderMarriageStatsList." + vo.getAreaCode() + "." + vo.getYear();
}
// 获取婚姻统计key
public static String getMarriageStatsKey(StatsReqVo vo) {
return PREFIX + "getMarriageStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 获取近5年结婚离婚走势key
public static String getFivesYearMarriageLineKey(String areaCode) {
return PREFIX + "getFivesYearMarriageLine." + areaCode;
}
// 获取近一年每个月结婚离婚走势key
public static String getMonthMarriageLineKey(String areaCode) {
return PREFIX + "getMonthMarriageLine." + areaCode;
}
// 获取社会机构统计
public static String getSoorganStatsListKey(StatsReqVo vo) {
return PREFIX + "getSoorganStatsList." + vo.getAreaCode() + "." + vo.getYear();
}
// 获取社会机构统计
public static String getSoorganStatsKey(StatsReqVo vo) {
return PREFIX + "getSoorganStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 获取社会机构区域占比统计
public static String getSoorganPercentageStatsKey(StatsReqVo vo) {
return PREFIX + "getSoorganPercentageStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 儿童机构福利统计列表
public static String getAgencyChildStatsListKey(StatsReqVo vo) {
return PREFIX + "getAgencyChildStatsList." + vo.getAreaCode() + "." + vo.getYear();
}
// 儿童机构福利统计
public static String getAgencyChildStatsKey(StatsReqVo vo) {
return PREFIX + "getAgencyChildStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 区域机构占比
public static String getAgencyPercentageStatsKey(StatsReqVo vo) {
return PREFIX + "getAgencyPercentageStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 获取福利院下的儿童统计
public static String getAgencyUnderChildStatsListKey(StatsReqVo vo) {
return PREFIX + "getAgencyUnderChildStatsList." + vo.getAreaCode() + "." + vo.getYear();
}
// 残疾等级统计
public static String getDisabledLevelStatsKey(StatsReqVo vo) {
return PREFIX + "getDisabledLevelStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 统计年发放人数和金额
public static String getYearDisabledIssueStatsKey(StatsReqVo vo) {
return PREFIX + "getYearDisabledIssueStats." + vo.getAreaCode();
}
// 获取区域残疾统计
public static String getAreaDisabledIssueStatsKey(StatsReqVo vo) {
return PREFIX + "getAreaDisabledIssueStats." + vo.getAreaCode() + "." + vo.getYear();
}
public static String getEnjoySubsidyStatsKey(StatsReqVo vo) {
return PREFIX + "getEnjoySubsidyStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 获取区域养老院统计列表
public static String getAreaNursingStatsListKey(StatsReqVo vo) {
return PREFIX + "getAreaNursingStatsList." + vo.getAreaCode() + "." + vo.getYear() + "." + vo.getType();
}
// 殡葬火化量统计列表
public static String getCremationStatsListKey(StatsReqVo vo) {
return PREFIX + "getCremationStatsList." + vo.getAreaCode() + "." + vo.getYear();
}
//殡葬火化量殡仪馆数据统计
public static String getCremationStatsByIdKey(StatsReqVo vo) {
return PREFIX + "getCremationStatsById." + vo.getAreaCode() + "." + vo.getYear();
}
// 区域火化率占比
public static String getCremationRateStatsKey(StatsReqVo vo) {
return PREFIX + "getCremationRateStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 火化量汇总Key
public static String getCremationStatsKey(StatsReqVo vo) {
return PREFIX + "getCremationStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 获取App首页地图
public static String getAppMapStatsKey(StatsReqVo vo) {
return PREFIX + "getAppMapStats." + vo.getAreaCode();
}
// 聚合搜索
public static String gatherSearchKey(StatsReqVo vo) {
return PREFIX + "gatherSearch." + vo.getKeyword();
}
// 社会组织搜索
public static String soorganSearchKey() {
return PREFIX + "soorganSearch.";
}
// 低保 获取当前享受低保人数
public static String getEnjoyEnbuzNumKey(StatsReqVo vo) {
return PREFIX + "getEnjoyEnbuzNum." + vo.getAreaCode() + "." + vo.getYear();
}
// 低保 获取指定区域下的人数统计
public static String getAreaUnderEnbuzNumStatsKey(StatsReqVo vo) {
return PREFIX + "getAreaUnderEnbuzNumStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 低保 获取近5年折线图
public static String getFivesYearEnbuzEnjoyStatsKey(StatsReqVo vo) {
return PREFIX + "getFivesYearEnbuzEnjoyStats." + vo.getAreaCode();
}
// 获取区域下的救助统计
public static String getAreaShjzStats(StatsReqVo vo) {
return PREFIX + "getAreaShjzStats." + vo.getAreaCode();
}
//获取两项补贴统计
public static String getEnjoySumStatsKey(StatsReqVo vo) {
return PREFIX + "getEnjoySumStats." + vo.getAreaCode();
}
}
package com.zq.portal.manager;
import com.zq.portal.vo.StatsReqVo;
public abstract class PortalCacheKeys {
public static final String PREFIX = "portal.";
// 获取婚姻统计列表key
public static String getAreaUnderMarriageStatsListKey(StatsReqVo vo) {
return PREFIX + "getAreaUnderMarriageStatsList." + vo.getAreaCode() + "." + vo.getYear();
}
// 获取婚姻统计key
public static String getMarriageStatsKey(StatsReqVo vo) {
return PREFIX + "getMarriageStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 获取近5年结婚离婚走势key
public static String getFivesYearMarriageLineKey(String areaCode) {
return PREFIX + "getFivesYearMarriageLine." + areaCode;
}
// 获取近一年每个月结婚离婚走势key
public static String getMonthMarriageLineKey(String areaCode) {
return PREFIX + "getMonthMarriageLine." + areaCode;
}
// 获取社会机构统计
public static String getSoorganStatsListKey(StatsReqVo vo) {
return PREFIX + "getSoorganStatsList." + vo.getAreaCode() + "." + vo.getYear();
}
// 获取社会机构统计
public static String getSoorganStatsKey(StatsReqVo vo) {
return PREFIX + "getSoorganStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 获取社会机构区域占比统计
public static String getSoorganPercentageStatsKey(StatsReqVo vo) {
return PREFIX + "getSoorganPercentageStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 儿童机构福利统计列表
public static String getAgencyChildStatsListKey(StatsReqVo vo) {
return PREFIX + "getAgencyChildStatsList." + vo.getAreaCode() + "." + vo.getYear();
}
// 儿童机构福利统计
public static String getAgencyChildStatsKey(StatsReqVo vo) {
return PREFIX + "getAgencyChildStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 区域机构占比
public static String getAgencyPercentageStatsKey(StatsReqVo vo) {
return PREFIX + "getAgencyPercentageStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 获取福利院下的儿童统计
public static String getAgencyUnderChildStatsListKey(StatsReqVo vo) {
return PREFIX + "getAgencyUnderChildStatsList." + vo.getAreaCode() + "." + vo.getYear();
}
// 残疾等级统计
public static String getDisabledLevelStatsKey(StatsReqVo vo) {
return PREFIX + "getDisabledLevelStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 统计年发放人数和金额
public static String getYearDisabledIssueStatsKey(StatsReqVo vo) {
return PREFIX + "getYearDisabledIssueStats." + vo.getAreaCode();
}
// 获取区域残疾统计
public static String getAreaDisabledIssueStatsKey(StatsReqVo vo) {
return PREFIX + "getAreaDisabledIssueStats." + vo.getAreaCode() + "." + vo.getYear();
}
public static String getEnjoySubsidyStatsKey(StatsReqVo vo) {
return PREFIX + "getEnjoySubsidyStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 获取区域养老院统计列表
public static String getAreaNursingStatsListKey(StatsReqVo vo) {
return PREFIX + "getAreaNursingStatsList." + vo.getAreaCode() + "." + vo.getYear() + "." + vo.getType();
}
// 殡葬火化量统计列表
public static String getCremationStatsListKey(StatsReqVo vo) {
return PREFIX + "getCremationStatsList." + vo.getAreaCode() + "." + vo.getYear();
}
//殡葬火化量殡仪馆数据统计
public static String getCremationStatsByIdKey(StatsReqVo vo) {
return PREFIX + "getCremationStatsById." + vo.getAreaCode() + "." + vo.getYear();
}
// 区域火化率占比
public static String getCremationRateStatsKey(StatsReqVo vo) {
return PREFIX + "getCremationRateStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 火化量汇总Key
public static String getCremationStatsKey(StatsReqVo vo) {
return PREFIX + "getCremationStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 获取App首页地图
public static String getAppMapStatsKey(StatsReqVo vo) {
return PREFIX + "getAppMapStats." + vo.getAreaCode();
}
// 聚合搜索
public static String gatherSearchKey(StatsReqVo vo) {
return PREFIX + "gatherSearch." + vo.getKeyword();
}
// 社会组织搜索
public static String soorganSearchKey() {
return PREFIX + "soorganSearch.";
}
// 低保 获取当前享受低保人数
public static String getEnjoyEnbuzNumKey(StatsReqVo vo) {
return PREFIX + "getEnjoyEnbuzNum." + vo.getAreaCode() + "." + vo.getYear();
}
// 低保 获取指定区域下的人数统计
public static String getAreaUnderEnbuzNumStatsKey(StatsReqVo vo) {
return PREFIX + "getAreaUnderEnbuzNumStats." + vo.getAreaCode() + "." + vo.getYear();
}
// 低保 获取近5年折线图
public static String getFivesYearEnbuzEnjoyStatsKey(StatsReqVo vo) {
return PREFIX + "getFivesYearEnbuzEnjoyStats." + vo.getAreaCode();
}
// 获取区域下的救助统计
public static String getAreaShjzStats(StatsReqVo vo) {
return PREFIX + "getAreaShjzStats." + vo.getAreaCode();
}
//获取两项补贴统计
public static String getEnjoySumStatsKey(StatsReqVo vo) {
return PREFIX + "getEnjoySumStats." + vo.getAreaCode();
}
public static String getYearMarriedCoupleKey() {
return PREFIX+"getYearMarriedCouple";
}
}
package com.zq.portal.service;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zq.common.config.redis.RedisUtils;
import com.zq.common.utils.PagingUtils;
import com.zq.common.utils.StringUtils;
import com.zq.portal.dao.AreaDao;
import com.zq.portal.dao.HyStatsDao;
import com.zq.portal.dao.VMarriageStatsDao;
import com.zq.portal.entity.SystemArea;
import com.zq.portal.entity.VMarriageStats;
import com.zq.portal.manager.PortalCacheKeys;
import com.zq.portal.vo.LineDataVo;
import com.zq.portal.vo.SearchReqVo;
import com.zq.portal.vo.StatsReqVo;
import com.zq.portal.vo.StatsVo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.*;
@Service
@RequiredArgsConstructor
public class HyStatsService {
private final HyStatsDao hyStatsDao;
private final AreaDao areaDao;
private final VMarriageStatsDao vMarriageStatsDao;
private final RedisUtils redisUtils;
/**
* 获取缓存婚姻统计
*
* @param vo
* @return
*/
public VMarriageStats getCacheMarriageStats(StatsReqVo vo) {
Object obj = redisUtils.getObj(PortalCacheKeys.getMarriageStatsKey(vo));
if (obj != null) {
return (VMarriageStats) obj;
}
return getMarriageStats(vo);
}
/**
* 婚姻统计
*
* @param vo
* @return
*/
public VMarriageStats getMarriageStats(StatsReqVo vo) {
if (StringUtils.isBlank(vo.getAreaCode())) {
vo.setAreaCode("450000000000");
}
SystemArea area = areaDao.getAreaByCode(vo.getAreaCode());
vo.setSubAreaCode(area.subAreaCode());
// 统计实体
VMarriageStats build = VMarriageStats.builder()
.areaCode(area.getCode())
.areaName(area.getName())
.year(vo.getYear())
.createTime(DateUtil.parseDate(DateUtil.today()))
.build();
// 结婚 离婚 补领结婚证 补领离婚证
List<StatsVo> marriageStatsList = hyStatsDao.getMarriageStats(vo);
for (StatsVo statsVo : marriageStatsList) {
if ("IA".equals(statsVo.getType())) {
build.setMarryNum(statsVo.getNum());
} else if ("IB".equals(statsVo.getType())) {
build.setDivorceNum(statsVo.getNum());
} else if ("ICA".equals(statsVo.getType())) {
build.setPatchMarryCaNum(statsVo.getNum());
} else if ("ICB".equals(statsVo.getType())) {
build.setPatchDivorceCaNum(statsVo.getNum());
}
}
// 获取离婚中的人数
StatsVo inDivorceNum = hyStatsDao.getInDivorceNum(vo);
build.setInDivorceNum(inDivorceNum.getNum());
// 获取跨地结婚离婚人数
List<StatsVo> crossMarriageStats = hyStatsDao.getCrossMarriageStats(vo);
for (StatsVo crossMarriageStat : crossMarriageStats) {
if ("IA".equals(crossMarriageStat.getType())) {
build.setCrossMarryNum(crossMarriageStat.getNum());
} else if ("IB".equals(crossMarriageStat.getType())) {
build.setCrossDivorceNum(crossMarriageStat.getNum());
}
}
// 放进缓存
redisUtils.setObj(PortalCacheKeys.getMarriageStatsKey(vo), build);
// 放进数据库 有时间条件的不存库
VMarriageStats marriageStats = vMarriageStatsDao.selectOne(Wrappers.lambdaQuery(VMarriageStats.builder().year(vo.getYear() == null ? 0 : vo.getYear()).areaCode(area.getCode()).createTime(DateUtil.parseDate(DateUtil.today())).build()));
if (marriageStats == null) {
vMarriageStatsDao.insert(build);
} else {
build.setId(marriageStats.getId());
vMarriageStatsDao.updateById(build);
}
return build;
}
/**
* 获取缓存区域下的结婚离婚数据
*
* @param vo
* @return
*/
public Object getCacheAreaUnderMarriageStatsList(StatsReqVo vo) {
Object obj = redisUtils.getObj(PortalCacheKeys.getAreaUnderMarriageStatsListKey(vo));
if (obj != null) {
return obj;
}
return getAreaUnderMarriageStatsList(vo);
}
/**
* 获取区域下的结婚离婚数据
*
* @param vo
* @return
*/
public Object getAreaUnderMarriageStatsList(StatsReqVo vo) {
String cacheKey = PortalCacheKeys.getAreaUnderMarriageStatsListKey(vo);
SystemArea area = areaDao.selectById(vo.getAreaCode());
vo.setSubAreaCode(area.subAreaCode());
vo.setSize(SystemArea.getNextLevelLength(area.getType()));
List<VMarriageStats> returnData = new ArrayList<>();
// List<StatsVo> statsList = hyStatsDao.getAreaUnderMarriageStatsList(vo);
// statsList:
// for (StatsVo stats : statsList) {
// if ("IA".equals(stats.getType())) {
// for (VMarriageStats marriageStats : returnData) {
// if (marriageStats.getAreaCode().startsWith(stats.getCode())) {
// marriageStats.setMarryNum(stats.getNum());
// continue statsList;// 继续下一个统计
// }
// }
//
// SystemArea systemArea = areaDao.selectById(SystemArea.patchZero(stats.getCode()));
// VMarriageStats build = VMarriageStats.builder()
// .areaCode(systemArea.getCode())
// .areaName(systemArea.getName())
// .year(vo.getYear())
// .marryNum(stats.getNum())
// .build();
// returnData.add(build);
// } else if ("IB".equals(stats.getType())) {
// for (VMarriageStats marriageStats : returnData) {
// if (marriageStats.getAreaCode().startsWith(stats.getCode())) {
// marriageStats.setDivorceNum(stats.getNum());
// continue statsList;// 继续下一个统计
// }
// }
//
// SystemArea systemArea = areaDao.selectById(SystemArea.patchZero(stats.getCode()));
// VMarriageStats build = VMarriageStats.builder()
// .areaCode(systemArea.getCode())
// .areaName(systemArea.getName())
// .year(vo.getYear())
// .marryNum(stats.getNum())
// .build();
// returnData.add(build);
// }
// }
// returnData.sort(Comparator.comparing(VMarriageStats::getAreaCode));
List<SystemArea> systemAreaList = areaDao.selectList(Wrappers.lambdaQuery(SystemArea.builder().parentId(vo.getAreaCode()).build()));
for (SystemArea systemArea : systemAreaList) {
vo.setAreaCode(systemArea.getCode());
VMarriageStats marriageStats = getCacheMarriageStats(vo);
returnData.add(marriageStats);
}
List<String> cityList = new ArrayList<>();
List<String> iaList = new ArrayList<>();
List<String> ibList = new ArrayList<>();
for (VMarriageStats marriageStats : returnData) {
cityList.add(marriageStats.getAreaName());
iaList.add(NumberUtil.toStr(marriageStats.getMarryNum(), "0"));
ibList.add(NumberUtil.toStr(marriageStats.getDivorceNum(), "0"));
}
Map<String, Object> returnMap = new HashMap<>();
returnMap.put("cityList", cityList);
returnMap.put("iaList", iaList);
returnMap.put("ibList", ibList);
returnMap.put("statsList", returnData);
redisUtils.setObj(cacheKey, returnMap);
return returnMap;
}
/**
* 获取冷静期和真正离婚的折线图数据
*
* @param vo
* @return
*/
public Object getDivorceCoolingLine(StatsReqVo vo) {
// 获取冷静期
List<StatsVo> statsVoList = hyStatsDao.getMonthDivorceCoolingData(vo);
return null;
}
/**
* 缓存获取近5年结婚离婚走势
*
* @param vo
* @return
*/
public Object getCacheFivesYearMarriageLine(StatsReqVo vo) {
Object obj = redisUtils.getObj(PortalCacheKeys.getFivesYearMarriageLineKey(vo.getAreaCode()));
if (obj != null) {
return obj;
}
return getFivesYearMarriageLine(vo);
}
/**
* 获取近5年结婚离婚走势
*
* @param vo
* @return
*/
public Object getFivesYearMarriageLine(StatsReqVo vo) {
if (StringUtils.isBlank(vo.getAreaCode())) {
vo.setAreaCode("450000000000");
}
SystemArea area = areaDao.getAreaByCode(SystemArea.patchZero(vo.getAreaCode()));
vo.setSubAreaCode(area.subAreaCode());
vo.setType("IA");
List<StatsVo> ia = hyStatsDao.getFivesYearMarriageLine(vo);
ia.sort(Comparator.comparing(StatsVo::getYear));
List<String> iaDateList = new ArrayList<>();
List<String> iaAmountList = new ArrayList<>();
ia.forEach(statsVo -> {
iaDateList.add(statsVo.getYear());
iaAmountList.add(String.valueOf(statsVo.getNum()));
});
LineDataVo iaLineData = LineDataVo.builder().dateList(iaDateList).amountList(iaAmountList).build();
vo.setType("IB");
List<StatsVo> ib = hyStatsDao.getFivesYearMarriageLine(vo);
ib.sort(Comparator.comparing(StatsVo::getYear));
List<String> ibDateList = new ArrayList<>();
List<String> ibAmountList = new ArrayList<>();
ib.forEach(statsVo -> {
ibDateList.add(statsVo.getYear());
ibAmountList.add(String.valueOf(statsVo.getNum()));
});
LineDataVo ibLineData = LineDataVo.builder().dateList(ibDateList).amountList(ibAmountList).build();
// 结婚总对数
int iaTotalNum = 0;
for (String num : iaAmountList) {
iaTotalNum += Integer.parseInt(num);
}
// 后台管理数据
Map<String, Object> adminData = new HashMap<>();
adminData.put("iaLineData", iaLineData);
adminData.put("ibLineData", ibLineData);
adminData.put("iaTotalNum", iaTotalNum);
//App数据
Map<String, Object> appData = new HashMap<>();
appData.put("categories", iaDateList);
Map<String, Object> iaLine = new HashMap<>();
iaLine.put("name", "结婚对数");
iaLine.put("data", iaAmountList);
Map<String, Object> ibLine = new HashMap<>();
ibLine.put("name", "离婚对数");
ibLine.put("data", ibAmountList);
List<Map<String, Object>> seriesList = new ArrayList<>();
seriesList.add(iaLine);
seriesList.add(ibLine);
appData.put("series", seriesList);
Map<String, Object> returnData = new HashMap<>();
returnData.put("admin", adminData);
returnData.put("app", appData);
redisUtils.setObj(PortalCacheKeys.getFivesYearMarriageLineKey(vo.getAreaCode()), returnData);
return returnData;
}
/**
* 获取缓存月统计折线
*
* @param vo
* @return
*/
public Object getCacheMonthMarriageLine(StatsReqVo vo) {
Object obj = redisUtils.getObj(PortalCacheKeys.getMonthMarriageLineKey(vo.getAreaCode()));
if (obj != null) {
return obj;
}
return getMonthMarriageLine(vo);
}
/**
* 月统计折线
*
* @param vo
* @return
*/
public Object getMonthMarriageLine(StatsReqVo vo) {
if (StringUtils.isBlank(vo.getAreaCode())) {
vo.setAreaCode("450000000000");
}
SystemArea area = areaDao.getAreaByCode(vo.getAreaCode());
vo.setSubAreaCode(area.subAreaCode());
vo.setType("IA");
List<StatsVo> ia = hyStatsDao.getMonthMarriageLine(vo);
ia.sort(Comparator.comparing(StatsVo::getMonth));
List<String> iaDateList = new ArrayList<>();
List<String> iaAmountList = new ArrayList<>();
ia.forEach(statsVo -> {
iaDateList.add(statsVo.getMonth());
iaAmountList.add(String.valueOf(statsVo.getNum()));
});
LineDataVo iaLineData = LineDataVo.builder().dateList(iaDateList).amountList(iaAmountList).build();
vo.setType("IB");
List<StatsVo> ib = hyStatsDao.getMonthMarriageLine(vo);
ib.sort(Comparator.comparing(StatsVo::getMonth));
List<String> ibDateList = new ArrayList<>();
List<String> ibAmountList = new ArrayList<>();
ib.forEach(statsVo -> {
ibDateList.add(statsVo.getMonth());
ibAmountList.add(String.valueOf(statsVo.getNum()));
});
LineDataVo ibLineData = LineDataVo.builder().dateList(ibDateList).amountList(ibAmountList).build();
// 后台管理数据
Map<String, Object> adminData = new HashMap<>();
adminData.put("iaLineData", iaLineData);
adminData.put("ibLineData", ibLineData);
//App数据
Map<String, Object> appData = new HashMap<>();
appData.put("categories", iaDateList);
Map<String, Object> iaLine = new HashMap<>();
iaLine.put("name", "结婚对数");
iaLine.put("data", iaAmountList);
Map<String, Object> ibLine = new HashMap<>();
ibLine.put("name", "离婚对数");
ibLine.put("data", ibAmountList);
List<Map<String, Object>> seriesList = new ArrayList<>();
seriesList.add(iaLine);
seriesList.add(ibLine);
appData.put("series", seriesList);
Map<String, Object> returnData = new HashMap<>();
returnData.put("admin", adminData);
returnData.put("app", appData);
redisUtils.setObj(PortalCacheKeys.getMonthMarriageLineKey(vo.getAreaCode()), returnData);
return returnData;
}
/**
* 搜索
*
* @param vo
* @return
*/
public Object marriageSearch(SearchReqVo vo) {
if (StrUtil.isBlank(vo.getKeyword())) {
SystemArea systemArea = areaDao.selectById(vo.getAreaCode());
vo.setSubAreaCode(systemArea.subAreaCode());
}
return PagingUtils.paging(vo, hyStatsDao::search);
}
}
package com.zq.portal.service;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zq.common.config.redis.RedisUtils;
import com.zq.common.utils.PagingUtils;
import com.zq.common.utils.StringUtils;
import com.zq.portal.dao.AreaDao;
import com.zq.portal.dao.HyStatsDao;
import com.zq.portal.dao.VMarriageStatsDao;
import com.zq.portal.entity.SystemArea;
import com.zq.portal.entity.VMarriageStats;
import com.zq.portal.manager.PortalCacheKeys;
import com.zq.portal.vo.LineDataVo;
import com.zq.portal.vo.SearchReqVo;
import com.zq.portal.vo.StatsReqVo;
import com.zq.portal.vo.StatsVo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.*;
@Service
@RequiredArgsConstructor
public class HyStatsService {
private final HyStatsDao hyStatsDao;
private final AreaDao areaDao;
private final VMarriageStatsDao vMarriageStatsDao;
private final RedisUtils redisUtils;
/**
* 获取缓存婚姻统计
*
* @param vo
* @return
*/
public VMarriageStats getCacheMarriageStats(StatsReqVo vo) {
Object obj = redisUtils.getObj(PortalCacheKeys.getMarriageStatsKey(vo));
if (obj != null) {
return (VMarriageStats) obj;
}
return getMarriageStats(vo);
}
/**
* 婚姻统计
*
* @param vo
* @return
*/
public VMarriageStats getMarriageStats(StatsReqVo vo) {
if (StringUtils.isBlank(vo.getAreaCode())) {
vo.setAreaCode("450000000000");
}
SystemArea area = areaDao.getAreaByCode(vo.getAreaCode());
vo.setSubAreaCode(area.subAreaCode());
// 统计实体
VMarriageStats build = VMarriageStats.builder()
.areaCode(area.getCode())
.areaName(area.getName())
.year(2022)
.createTime(DateUtil.parseDate(DateUtil.today()))
.build();
// 结婚 离婚 补领结婚证 补领离婚证
List<StatsVo> marriageStatsList = hyStatsDao.getMarriageStats(vo);
for (StatsVo statsVo : marriageStatsList) {
if ("IA".equals(statsVo.getType())) {
build.setMarryNum(statsVo.getNum());
} else if ("IB".equals(statsVo.getType())) {
build.setDivorceNum(statsVo.getNum());
} else if ("ICA".equals(statsVo.getType())) {
build.setPatchMarryCaNum(statsVo.getNum());
} else if ("ICB".equals(statsVo.getType())) {
build.setPatchDivorceCaNum(statsVo.getNum());
}
}
// 获取离婚中的人数
StatsVo inDivorceNum = hyStatsDao.getInDivorceNum(vo);
build.setInDivorceNum(inDivorceNum.getNum());
// 获取跨地结婚离婚人数
List<StatsVo> crossMarriageStats = hyStatsDao.getCrossMarriageStats(vo);
for (StatsVo crossMarriageStat : crossMarriageStats) {
if ("IA".equals(crossMarriageStat.getType())) {
build.setCrossMarryNum(crossMarriageStat.getNum());
} else if ("IB".equals(crossMarriageStat.getType())) {
build.setCrossDivorceNum(crossMarriageStat.getNum());
}
}
// 放进缓存
redisUtils.setObj(PortalCacheKeys.getMarriageStatsKey(vo), build);
// 放进数据库 有时间条件的不存库
// VMarriageStats marriageStats = vMarriageStatsDao.selectOne(Wrappers.lambdaQuery(VMarriageStats.builder().year(vo.getYear() == null ? 0 : vo.getYear()).areaCode(area.getCode()).createTime(DateUtil.parseDate(DateUtil.today())).build()));
VMarriageStats marriageStats = vMarriageStatsDao.selectOne(Wrappers.lambdaQuery(VMarriageStats.builder().year(2022).areaCode(area.getCode()).createTime(DateUtil.parseDate(DateUtil.today())).build()));
if (marriageStats == null) {
vMarriageStatsDao.insert(build);
} else {
build.setId(marriageStats.getId());
vMarriageStatsDao.updateById(build);
}
return build;
}
/**
* 获取缓存区域下的结婚离婚数据
*
* @param vo
* @return
*/
public Object getCacheAreaUnderMarriageStatsList(StatsReqVo vo) {
Object obj = redisUtils.getObj(PortalCacheKeys.getAreaUnderMarriageStatsListKey(vo));
if (obj != null) {
return obj;
}
return getAreaUnderMarriageStatsList(vo);
}
/**
* 获取区域下的结婚离婚数据
*
* @param vo
* @return
*/
public Object getAreaUnderMarriageStatsList(StatsReqVo vo) {
String cacheKey = PortalCacheKeys.getAreaUnderMarriageStatsListKey(vo);
SystemArea area = areaDao.selectById(vo.getAreaCode());
vo.setSubAreaCode(area.subAreaCode());
vo.setSize(SystemArea.getNextLevelLength(area.getType()));
List<VMarriageStats> returnData = new ArrayList<>();
// List<StatsVo> statsList = hyStatsDao.getAreaUnderMarriageStatsList(vo);
// statsList:
// for (StatsVo stats : statsList) {
// if ("IA".equals(stats.getType())) {
// for (VMarriageStats marriageStats : returnData) {
// if (marriageStats.getAreaCode().startsWith(stats.getCode())) {
// marriageStats.setMarryNum(stats.getNum());
// continue statsList;// 继续下一个统计
// }
// }
//
// SystemArea systemArea = areaDao.selectById(SystemArea.patchZero(stats.getCode()));
// VMarriageStats build = VMarriageStats.builder()
// .areaCode(systemArea.getCode())
// .areaName(systemArea.getName())
// .year(vo.getYear())
// .marryNum(stats.getNum())
// .build();
// returnData.add(build);
// } else if ("IB".equals(stats.getType())) {
// for (VMarriageStats marriageStats : returnData) {
// if (marriageStats.getAreaCode().startsWith(stats.getCode())) {
// marriageStats.setDivorceNum(stats.getNum());
// continue statsList;// 继续下一个统计
// }
// }
//
// SystemArea systemArea = areaDao.selectById(SystemArea.patchZero(stats.getCode()));
// VMarriageStats build = VMarriageStats.builder()
// .areaCode(systemArea.getCode())
// .areaName(systemArea.getName())
// .year(vo.getYear())
// .marryNum(stats.getNum())
// .build();
// returnData.add(build);
// }
// }
// returnData.sort(Comparator.comparing(VMarriageStats::getAreaCode));
List<SystemArea> systemAreaList = areaDao.selectList(Wrappers.lambdaQuery(SystemArea.builder().parentId(vo.getAreaCode()).build()));
for (SystemArea systemArea : systemAreaList) {
vo.setAreaCode(systemArea.getCode());
VMarriageStats marriageStats = getCacheMarriageStats(vo);
returnData.add(marriageStats);
}
List<String> cityList = new ArrayList<>();
List<String> iaList = new ArrayList<>();
List<String> ibList = new ArrayList<>();
for (VMarriageStats marriageStats : returnData) {
cityList.add(marriageStats.getAreaName());
iaList.add(NumberUtil.toStr(marriageStats.getMarryNum(), "0"));
ibList.add(NumberUtil.toStr(marriageStats.getDivorceNum(), "0"));
}
Map<String, Object> returnMap = new HashMap<>();
returnMap.put("cityList", cityList);
returnMap.put("iaList", iaList);
returnMap.put("ibList", ibList);
returnMap.put("statsList", returnData);
redisUtils.setObj(cacheKey, returnMap);
return returnMap;
}
/**
* 获取冷静期和真正离婚的折线图数据
*
* @param vo
* @return
*/
public Object getDivorceCoolingLine(StatsReqVo vo) {
// 获取冷静期
List<StatsVo> statsVoList = hyStatsDao.getMonthDivorceCoolingData(vo);
return null;
}
/**
* 缓存获取近5年结婚离婚走势
*
* @param vo
* @return
*/
public Object getCacheFivesYearMarriageLine(StatsReqVo vo) {
Object obj = redisUtils.getObj(PortalCacheKeys.getFivesYearMarriageLineKey(vo.getAreaCode()));
if (obj != null) {
return obj;
}
return getFivesYearMarriageLine(vo);
}
/**
* 获取近5年结婚离婚走势
*
* @param vo
* @return
*/
public Object getFivesYearMarriageLine(StatsReqVo vo) {
if (StringUtils.isBlank(vo.getAreaCode())) {
vo.setAreaCode("450000000000");
}
SystemArea area = areaDao.getAreaByCode(SystemArea.patchZero(vo.getAreaCode()));
vo.setSubAreaCode(area.subAreaCode());
vo.setType("IA");
List<StatsVo> ia = hyStatsDao.getFivesYearMarriageLine(vo);
ia.sort(Comparator.comparing(StatsVo::getYear));
List<String> iaDateList = new ArrayList<>();
List<String> iaAmountList = new ArrayList<>();
ia.forEach(statsVo -> {
iaDateList.add(statsVo.getYear());
iaAmountList.add(String.valueOf(statsVo.getNum()));
});
LineDataVo iaLineData = LineDataVo.builder().dateList(iaDateList).amountList(iaAmountList).build();
vo.setType("IB");
List<StatsVo> ib = hyStatsDao.getFivesYearMarriageLine(vo);
ib.sort(Comparator.comparing(StatsVo::getYear));
List<String> ibDateList = new ArrayList<>();
List<String> ibAmountList = new ArrayList<>();
ib.forEach(statsVo -> {
ibDateList.add(statsVo.getYear());
ibAmountList.add(String.valueOf(statsVo.getNum()));
});
LineDataVo ibLineData = LineDataVo.builder().dateList(ibDateList).amountList(ibAmountList).build();
// 结婚总对数
int iaTotalNum = 0;
for (String num : iaAmountList) {
iaTotalNum += Integer.parseInt(num);
}
// 后台管理数据
Map<String, Object> adminData = new HashMap<>();
adminData.put("iaLineData", iaLineData);
adminData.put("ibLineData", ibLineData);
adminData.put("iaTotalNum", iaTotalNum);
//App数据
Map<String, Object> appData = new HashMap<>();
appData.put("categories", iaDateList);
Map<String, Object> iaLine = new HashMap<>();
iaLine.put("name", "结婚对数");
iaLine.put("data", iaAmountList);
Map<String, Object> ibLine = new HashMap<>();
ibLine.put("name", "离婚对数");
ibLine.put("data", ibAmountList);
List<Map<String, Object>> seriesList = new ArrayList<>();
seriesList.add(iaLine);
seriesList.add(ibLine);
appData.put("series", seriesList);
Map<String, Object> returnData = new HashMap<>();
returnData.put("admin", adminData);
returnData.put("app", appData);
redisUtils.setObj(PortalCacheKeys.getFivesYearMarriageLineKey(vo.getAreaCode()), returnData);
return returnData;
}
/**
* 获取缓存月统计折线
*
* @param vo
* @return
*/
public Object getCacheMonthMarriageLine(StatsReqVo vo) {
Object obj = redisUtils.getObj(PortalCacheKeys.getMonthMarriageLineKey(vo.getAreaCode()));
if (obj != null) {
return obj;
}
return getMonthMarriageLine(vo);
}
/**
* 月统计折线
*
* @param vo
* @return
*/
public Object getMonthMarriageLine(StatsReqVo vo) {
if (StringUtils.isBlank(vo.getAreaCode())) {
vo.setAreaCode("450000000000");
}
SystemArea area = areaDao.getAreaByCode(vo.getAreaCode());
vo.setSubAreaCode(area.subAreaCode());
vo.setType("IA");
List<StatsVo> ia = hyStatsDao.getMonthMarriageLine(vo);
ia.sort(Comparator.comparing(StatsVo::getMonth));
List<String> iaDateList = new ArrayList<>();
List<String> iaAmountList = new ArrayList<>();
ia.forEach(statsVo -> {
iaDateList.add(statsVo.getMonth());
iaAmountList.add(String.valueOf(statsVo.getNum()));
});
LineDataVo iaLineData = LineDataVo.builder().dateList(iaDateList).amountList(iaAmountList).build();
vo.setType("IB");
List<StatsVo> ib = hyStatsDao.getMonthMarriageLine(vo);
ib.sort(Comparator.comparing(StatsVo::getMonth));
List<String> ibDateList = new ArrayList<>();
List<String> ibAmountList = new ArrayList<>();
ib.forEach(statsVo -> {
ibDateList.add(statsVo.getMonth());
ibAmountList.add(String.valueOf(statsVo.getNum()));
});
LineDataVo ibLineData = LineDataVo.builder().dateList(ibDateList).amountList(ibAmountList).build();
// 后台管理数据
Map<String, Object> adminData = new HashMap<>();
adminData.put("iaLineData", iaLineData);
adminData.put("ibLineData", ibLineData);
//App数据
Map<String, Object> appData = new HashMap<>();
appData.put("categories", iaDateList);
Map<String, Object> iaLine = new HashMap<>();
iaLine.put("name", "结婚对数");
iaLine.put("data", iaAmountList);
Map<String, Object> ibLine = new HashMap<>();
ibLine.put("name", "离婚对数");
ibLine.put("data", ibAmountList);
List<Map<String, Object>> seriesList = new ArrayList<>();
seriesList.add(iaLine);
seriesList.add(ibLine);
appData.put("series", seriesList);
Map<String, Object> returnData = new HashMap<>();
returnData.put("admin", adminData);
returnData.put("app", appData);
redisUtils.setObj(PortalCacheKeys.getMonthMarriageLineKey(vo.getAreaCode()), returnData);
return returnData;
}
/**
* 搜索
*
* @param vo
* @return
*/
public Object marriageSearch(SearchReqVo vo) {
if (StrUtil.isBlank(vo.getKeyword())) {
SystemArea systemArea = areaDao.selectById(vo.getAreaCode());
vo.setSubAreaCode(systemArea.subAreaCode());
}
return PagingUtils.paging(vo, hyStatsDao::search);
}
/**
* 获取缓存年统计结婚对数
*
* @param vo
* @return
*/
public Object getCacheYearMarriedCouple(StatsReqVo vo) {
Object obj = redisUtils.getObj(PortalCacheKeys.getYearMarriedCoupleKey());
if (obj != null) {
return obj;
}
return getYearMarriedCouple(vo);
}
/**
* 年统计结婚离婚对数
*
* @param vo
* @return
*/
private Object getYearMarriedCouple(StatsReqVo vo) {
Integer iaCount=null;
Integer ibCount=null;
Map<String, Object> returnData = new HashMap<>();
List<StatsVo> yearMarriedCouple = hyStatsDao.getYearMarriedCouple(vo);
for (StatsVo statsVo:yearMarriedCouple) {
if ("IA".equals(statsVo.getType())) {
iaCount = statsVo.getNum();
} else if ("IB".equals(statsVo.getType())) {
ibCount = statsVo.getNum();
}
}
returnData.put("结婚对数",iaCount);
returnData.put("离婚对数",ibCount);
return returnData;
}
}
package com.zq.portal.vo;
import lombok.*;
/**
* @author 婚姻
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class HYVo {
private String id;
private String bookId;
/**
* IA或C 结婚 IB 离婚
*/
private String opType;
private String marryType;
private String redoType;
private String deptCode;
private String deptName;
private String nameMan;
private String nameWoman;
private String birthMan;
private String birthWoman;
private String idTypeMan;
private String idTypeWoman;
private String certTypeMan;
private String certTypeWoman;
private String certNumMan;
private String certNumWoman;
private String nationMan;
private String nationWoman;
private String folkMan;
private String folkWoman;
private String jobMan;
private String jobWoman;
private String degreeMan;
private String degreeWoman;
private String marryStatusMan;
private String marryStatusWoman;
private String registypeMan;
private String registypeWoman;
private String regSjMan;
private String regSjWoman;
private String regDsMan;
private String regDsWoman;
private String regQxMan;
private String regQxWoman;
private String regJxMan;
private String regJxWoman;
private String regDetailMan;
private String regDetailWoman;
private String printNumMan;
private String printNumWoman;
private String picIdMan;
private String picIdWoman;
private String certProofMan;
private String certProofWoman;
private String oldCertNo;
private String oldDeptId;
private String oldDeptCode;
private String oldDeptName;
private String oldOpDate;
private String certNo;
private String opDate;
private String operator;
private String operatorId;
private String checkCode;
private String checkData;
private String renewFlag;
private String remedyFlag;
private String cohabitDate;
private String cancelProof;
private String dataSource;
private String docCode;
private String docYear;
private String docPageNum;
private String docNo;
private String divorceReason;
private String redoReason;
private String applyMan;
private String applyDate;
private String delegateFlag;
private String delegateType;
private String delegatedName;
private String delegatedCertType;
private String delegatedCertNo;
private String linkKindMan;
private String linkKindWoman;
private String addressNowMan;
private String addressNowWoman;
private String remark;
private String validFlag;
private String printRemark;
private String nameManEn;
private String nameWomanEn;
}
package com.zq.portal.vo;
import lombok.*;
/**
* @author 婚姻
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class HYVo {
private String id;
private String bookId;
/**
* IA或C 结婚 IB 离婚
*/
private String opType;
private String marryType;
private String redoType;
private String deptCode;
private String deptName;
private String nameMan;
private String nameWoman;
private String birthMan;
private String birthWoman;
private String idTypeMan;
private String idTypeWoman;
private String certTypeMan;
private String certTypeWoman;
private String certNumMan;
private String certNumWoman;
private String nationMan;
private String nationWoman;
private String folkMan;
private String folkWoman;
private String jobMan;
private String jobWoman;
private String degreeMan;
private String degreeWoman;
private String marryStatusMan;
private String marryStatusWoman;
private String registypeMan;
private String registypeWoman;
private String regSjMan;
private String regSjWoman;
private String regDsMan;
private String regDsWoman;
private String regQxMan;
private String regQxWoman;
private String regJxMan;
private String regJxWoman;
private String regDetailMan;
private String regDetailWoman;
private String printNumMan;
private String printNumWoman;
private String picIdMan;
private String picIdWoman;
private String certProofMan;
private String certProofWoman;
private String oldCertNo;
private String oldDeptId;
private String oldDeptCode;
private String oldDeptName;
private String oldOpDate;
private String certNo;
private String opDate;
private String operator;
private String operatorId;
private String checkCode;
private String checkData;
private String renewFlag;
private String remedyFlag;
private String cohabitDate;
private String cancelProof;
private String dataSource;
private String docCode;
private String docYear;
private String docPageNum;
private String docNo;
private String divorceReason;
private String redoReason;
private String applyMan;
private String applyDate;
private String delegateFlag;
private String delegateType;
private String delegatedName;
private String delegatedCertType;
private String delegatedCertNo;
private String linkKindMan;
private String linkKindWoman;
private String addressNowMan;
private String addressNowWoman;
private String remark;
private String validFlag;
private String printRemark;
private String nameManEn;
private String nameWomanEn;
}
package com.zq.portal.vo;
import com.zq.common.vo.PageReqVo;
import com.zq.portal.entity.SystemArea;
import lombok.*;
@Data
@EqualsAndHashCode(callSuper = true)
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class SearchReqVo extends PageReqVo {
@Builder.Default
private String areaCode = "450000000000";
private String subAreaCode;
private String keyword;
public String getAreaCode() {
return SystemArea.patchZero(areaCode);
}
}
package com.zq.portal.vo;
import com.zq.common.vo.PageReqVo;
import com.zq.portal.entity.SystemArea;
import lombok.*;
@Data
@EqualsAndHashCode(callSuper = true)
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class SearchReqVo extends PageReqVo {
@Builder.Default
private String areaCode = "450000000000";
private String subAreaCode;
private String keyword;
private String IAcount;
private String IBcount;
public String getAreaCode() {
return SystemArea.patchZero(areaCode);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zq.portal.dao.CjStatsDao">
<select id="getPeopleAmountStats" resultType="com.zq.portal.vo.StatsVo">
SELECT COUNT(1) 'num', SUM( SUBSIDY_STANDARD_MONEY ) 'amount', `YEAR` 'year'
FROM `cjrjz_application`
WHERE CHECK_STATUS = 1
AND `STATUS` = 0
AND APPROVE_DATE IS NOT NULL
GROUP BY `YEAR`
ORDER BY `YEAR` DESC LIMIT 5
</select>
<select id="getDisabledLevelStats" resultType="com.zq.portal.vo.StatsVo">
SELECT ENSURE_LEVEL_ID 'type', COUNT( 1 ) 'num'
FROM `cjrjz_proposer`
WHERE ENSURE_LEVEL_ID IS NOT NULL
<if test="type != null">
AND ENSURE_LEVEL_ID = #{type}
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND CARD_CODE LIKE CONCAT(#{subAreaCode}, '%')
</if>
<if test="year != null">
AND LEFT(CREATE_DATE, 4) = #{year}
</if>
GROUP BY ENSURE_LEVEL_ID
</select>
<!--获取近年重度残疾人数-->
<select id="getYearSevereDisabledStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT ( CREATE_DATE, 4 ) 'year',
COUNT( 1 ) 'num'
FROM
`cjrjz_proposer`
WHERE
ENSURE_LEVEL_ID IS NOT NULL
AND ENSURE_LEVEL_ID IN (1,2)
<if test="subAreaCode != null and subAreaCode != ''">
AND CARD_CODE LIKE CONCAT(#{subAreaCode}, '%')
</if>
<if test="year != null">
AND LEFT(CREATE_DATE, 4) = #{year}
</if>
GROUP BY LEFT ( CREATE_DATE, 4 )
ORDER BY LEFT ( CREATE_DATE, 4 ) DESC
LIMIT #{size}
</select>
<select id="getSeverePeopleNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
COUNT( 1 ) 'num'
FROM
`cjrjz_proposer`
WHERE
ENSURE_LEVEL_ID IS NOT NULL
AND ENSURE_LEVEL_ID IN (1,2)
<if test="subAreaCode != null and subAreaCode != ''">
AND CARD_CODE LIKE CONCAT(#{subAreaCode}, '%')
</if>
<if test="year != null">
AND LEFT(CREATE_DATE, 4) = #{year}
</if>
</select>
<select id="getDifficultPeopleNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
COUNT( 1 ) 'num'
FROM
`cjrjz_proposer`
WHERE
ENSURE_LEVEL_ID IS NOT NULL
AND ENSURE_LEVEL_ID IN (3,4)
<if test="subAreaCode != null and subAreaCode != ''">
AND CARD_CODE LIKE CONCAT(#{subAreaCode}, '%')
</if>
<if test="year != null">
AND LEFT(CREATE_DATE, 4) = #{year}
</if>
</select>
<select id="getAreaIssueStats" resultType="com.zq.portal.vo.StatsVo">
SELECT LEFT(UNIT_ID, #{size}) 'code', APPLY_TYPE_ID 'type', GRANT_YEAR 'year', COUNT_PEOPLE 'num', SUM_MONEY
'amount'
FROM `statics_grant`
WHERE DATE_FORMAT(create_time, '%Y-%m-%d') = (SELECT DATE_FORMAT(create_time, '%Y-%m-%d') FROM statics_grant ORDER BY create_time DESC LIMIT 1)
AND CHAR_LENGTH (LEFT ( UNIT_ID, #{size} )) = #{size}
<if test="year != null">
AND GRANT_YEAR = #{year}
</if>
<if test="type != null">
AND APPLY_TYPE_ID = #{type}
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND UNIT_ID LIKE CONCAT(#{subAreaCode}, '%')
</if>
GROUP BY LEFT(UNIT_ID, #{size})
</select>
<select id="getAreaSubsidyStats" resultType="com.zq.portal.vo.StatsVo">
SELECT LEFT(AREACODE, #{size}) 'code', FF_DATE 'month',SUM(FF_ZD_PC ) 'hlnum', SUM(FF_ZD_MC) 'hlamount',SUM(FF_KUN_PC) 'shnum', SUM(FF_KUN_MC) 'shamount'
FROM `ff_data_jm`
WHERE
CHAR_LENGTH (LEFT ( AREACODE, #{size} )) = #{size}
AND FF_DATE = DATE_FORMAT(NOW(),'%Y-%m')
<if test="subAreaCode != null and subAreaCode != ''">
AND AREACODE LIKE CONCAT(#{subAreaCode}, '%')
</if>
GROUP BY LEFT(AREACODE, #{size})
</select>
<select id="getEnjoySumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT SUM(S_PC) 'num' , SUM(S_MC) 'amount'
FROM ff_data_jm
WHERE FF_DATE = DATE_FORMAT(NOW(),'%Y-%m')
</select>
<select id="getYearIssueStats" resultType="com.zq.portal.vo.StatsVo">
SELECT APPLY_TYPE_ID 'type', GRANT_YEAR 'year', SUM( COUNT_PEOPLE ) 'num', SUM( SUM_MONEY ) 'amount'
FROM `statics_grant`
WHERE DATE_FORMAT(create_time, '%Y-%m-%d') = (SELECT DATE_FORMAT(create_time, '%Y-%m-%d') FROM statics_grant
ORDER BY create_time DESC LIMIT 1)
<if test="subAreaCode != null and subAreaCode != ''">
AND UNIT_ID LIKE CONCAT( #{subAreaCode}, '%' )
</if>
<if test="type != null">
AND APPLY_TYPE_ID = #{type}
</if>
GROUP BY GRANT_YEAR
ORDER BY GRANT_YEAR DESC LIMIT #{size}
</select>
<select id="getYearList" resultType="java.lang.String">
SELECT GRANT_YEAR 'year'
FROM `statics_grant`
GROUP BY GRANT_YEAR
ORDER BY GRANT_YEAR DESC LIMIT 5
</select>
<select id="search" resultType="java.util.Map">
SELECT NAME 'name', CARD_CODE 'idCard',MARRY_TYPE_ID 'marryType', REGISTER_ADDRESS_NAME
'addressName',ENSURE_LEVEL_ID 'levelId', CREATE_DATE 'createTime'
FROM
cjrjz_proposer
WHERE 1=1
<if test="keyword != null and keyword != ''">
AND (NAME =#{keyword} OR CARD_CODE =#{keyword})
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND CARD_CODE LIKE CONCAT(#{subAreaCode}, '%')
</if>
ORDER BY CREATE_DATE DESC
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zq.portal.dao.CjStatsDao">
<select id="getPeopleAmountStats" resultType="com.zq.portal.vo.StatsVo">
SELECT COUNT(1) 'num', SUM( SUBSIDY_STANDARD_MONEY ) 'amount', `YEAR` 'year'
FROM `cjrjz_application`
WHERE CHECK_STATUS = 1
AND `STATUS` = 0
AND APPROVE_DATE IS NOT NULL
GROUP BY `YEAR`
ORDER BY `YEAR` DESC LIMIT 5
</select>
<select id="getDisabledLevelStats" resultType="com.zq.portal.vo.StatsVo">
SELECT ENSURE_LEVEL_ID 'type', COUNT( 1 ) 'num'
FROM `cjrjz_proposer`
WHERE ENSURE_LEVEL_ID IS NOT NULL
<if test="type != null">
AND ENSURE_LEVEL_ID = #{type}
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND CARD_CODE LIKE CONCAT(#{subAreaCode}, '%')
</if>
<if test="year != null">
AND LEFT(CREATE_DATE, 4) = #{year}
</if>
GROUP BY ENSURE_LEVEL_ID
</select>
<!--获取近年重度残疾人数-->
<select id="getYearSevereDisabledStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT ( CREATE_DATE, 4 ) 'year',
COUNT( 1 ) 'num'
FROM
`cjrjz_proposer`
WHERE
ENSURE_LEVEL_ID IS NOT NULL
AND ENSURE_LEVEL_ID IN (1,2)
<if test="subAreaCode != null and subAreaCode != ''">
AND CARD_CODE LIKE CONCAT(#{subAreaCode}, '%')
</if>
<if test="year != null">
AND LEFT(CREATE_DATE, 4) = #{year}
</if>
GROUP BY LEFT ( CREATE_DATE, 4 )
ORDER BY LEFT ( CREATE_DATE, 4 ) DESC
LIMIT #{size}
</select>
<select id="getSeverePeopleNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
COUNT( 1 ) 'num'
FROM
`cjrjz_proposer`
WHERE
ENSURE_LEVEL_ID IS NOT NULL
AND ENSURE_LEVEL_ID IN (1,2)
<if test="subAreaCode != null and subAreaCode != ''">
AND CARD_CODE LIKE CONCAT(#{subAreaCode}, '%')
</if>
<if test="year != null">
AND LEFT(CREATE_DATE, 4) = #{year}
</if>
</select>
<select id="getDifficultPeopleNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
COUNT( 1 ) 'num'
FROM
`cjrjz_proposer`
WHERE
ENSURE_LEVEL_ID IS NOT NULL
AND ENSURE_LEVEL_ID IN (3,4)
<if test="subAreaCode != null and subAreaCode != ''">
AND CARD_CODE LIKE CONCAT(#{subAreaCode}, '%')
</if>
<if test="year != null">
AND LEFT(CREATE_DATE, 4) = #{year}
</if>
</select>
<select id="getAreaIssueStats" resultType="com.zq.portal.vo.StatsVo">
SELECT LEFT(UNIT_ID, #{size}) 'code', APPLY_TYPE_ID 'type', GRANT_YEAR 'year', COUNT_PEOPLE 'num', SUM_MONEY
'amount'
FROM `statics_grant`
WHERE
# DATE_FORMAT(create_time, '%Y-%m-%d') = (SELECT DATE_FORMAT(create_time, '%Y-%m-%d') FROM statics_grant ORDER BY create_time DESC LIMIT 1)
CHAR_LENGTH (LEFT ( UNIT_ID, #{size} )) = #{size}
<if test="year != null">
AND GRANT_YEAR = #{year}
</if>
<if test="type != null">
AND APPLY_TYPE_ID = #{type}
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND UNIT_ID LIKE CONCAT(#{subAreaCode}, '%')
</if>
GROUP BY LEFT(UNIT_ID, #{size})
</select>
<select id="getAreaSubsidyStats" resultType="com.zq.portal.vo.StatsVo">
SELECT LEFT(AREACODE, #{size}) 'code', FF_DATE 'month',SUM(FF_ZD_PC ) 'hlnum', SUM(FF_ZD_MC) 'hlamount',SUM(FF_KUN_PC) 'shnum', SUM(FF_KUN_MC) 'shamount'
FROM `ff_data_jm`
WHERE
CHAR_LENGTH (LEFT ( AREACODE, #{size} )) = #{size}
AND FF_DATE = DATE_FORMAT(NOW(),'%Y-%m')
<if test="subAreaCode != null and subAreaCode != ''">
AND AREACODE LIKE CONCAT(#{subAreaCode}, '%')
</if>
GROUP BY LEFT(AREACODE, #{size})
</select>
<select id="getEnjoySumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT SUM(S_PC) 'num' , SUM(S_MC) 'amount'
FROM ff_data_jm
WHERE FF_DATE = DATE_FORMAT(NOW(),'%Y-%m')
</select>
<select id="getYearIssueStats" resultType="com.zq.portal.vo.StatsVo">
SELECT APPLY_TYPE_ID 'type', GRANT_YEAR 'year', SUM( COUNT_PEOPLE ) 'num', SUM( SUM_MONEY ) 'amount'
FROM `statics_grant`
WHERE 1=1
# DATE_FORMAT(create_time, '%Y-%m-%d') = (SELECT DATE_FORMAT(create_time, '%Y-%m-%d') FROM statics_grant
# ORDER BY create_time DESC LIMIT 1)
<if test="subAreaCode != null and subAreaCode != ''">
AND UNIT_ID LIKE CONCAT( #{subAreaCode}, '%' )
</if>
<if test="type != null">
AND APPLY_TYPE_ID = #{type}
</if>
GROUP BY GRANT_YEAR
ORDER BY GRANT_YEAR DESC LIMIT #{size}
</select>
<select id="getYearList" resultType="java.lang.String">
SELECT GRANT_YEAR 'year'
FROM `statics_grant`
GROUP BY GRANT_YEAR
ORDER BY GRANT_YEAR DESC LIMIT 5
</select>
<select id="search" resultType="java.util.Map">
SELECT NAME 'name', CARD_CODE 'idCard',MARRY_TYPE_ID 'marryType', REGISTER_ADDRESS_NAME
'addressName',ENSURE_LEVEL_ID 'levelId', CREATE_DATE 'createTime'
FROM
cjrjz_proposer
WHERE 1=1
<if test="keyword != null and keyword != ''">
AND (NAME =#{keyword} OR CARD_CODE =#{keyword})
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND CARD_CODE LIKE CONCAT(#{subAreaCode}, '%')
</if>
ORDER BY CREATE_DATE DESC
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zq.portal.dao.HyStatsDao">
<select id="getFivesYearMarriageLine" resultType="com.zq.portal.vo.StatsVo">
SELECT COUNT(1) 'num', m.AIAX0001 'type', DATE_FORMAT( m.AIAX0048, "%Y" ) 'year'
FROM mrcase m LEFT JOIN taorg t ON m.AIAX0003 = t.ORGID
WHERE m.AIAX0072 = '1'
AND m.BIAX0075 = '1'
AND DATE_FORMAT(m.AIAX0048, "%Y") &lt;= YEAR(NOW())
AND m.AIAX0001 = #{type}
<if test="subAreaCode != null and subAreaCode != ''">
AND t.YAB003 LIKE CONCAT(#{subAreaCode},'%')
</if>
GROUP BY DATE_FORMAT(m.AIAX0048, "%Y")
ORDER BY DATE_FORMAT(m.AIAX0048, "%Y") DESC LIMIT 5
</select>
<select id="getMonthMarriageLine" resultType="com.zq.portal.vo.StatsVo">
SELECT COUNT(1) 'num', m.AIAX0001 'type', DATE_FORMAT( m.AIAX0048, "%Y-%m" ) 'month'
FROM mrcase m LEFT JOIN taorg t ON m.AIAX0003 = t.ORGID
WHERE m.AIAX0072 = '1'
AND m.BIAX0075 = '1'
AND m.AIAX0001 = #{type}
<if test="subAreaCode != null and subAreaCode != ''">
AND t.YAB003 LIKE CONCAT(#{subAreaCode},'%')
</if>
GROUP BY DATE_FORMAT(m.AIAX0048, '%Y-%m')
ORDER BY DATE_FORMAT(m.AIAX0048, '%Y-%m') DESC LIMIT 12
</select>
<select id="getMarriageStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
COUNT( 1 ) 'num',
m.AIAX0001 'type'
FROM
mrcase m LEFT JOIN taorg t ON m.AIAX0003 = t.ORGID
WHERE
m.AIAX0072 = '1'
AND m.BIAX0075 = '1'
<if test="year != null">
AND m.AIAX0059 = #{year}
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND t.YAB003 LIKE CONCAT(#{subAreaCode},'%')
</if>
GROUP BY
m.AIAX0001
</select>
<!--获取下级区域婚姻统计列表-->
<select id="getAreaUnderMarriageStatsList" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT ( t.YAB003, #{size} ) 'code',
m.AIAX0001 'type' ,
COUNT( 1 ) 'num'
FROM
mrcase m LEFT JOIN taorg t ON m.AIAX0003 = t.ORGID
WHERE
m.AIAX0072 = '1'
AND m.BIAX0075 = '1'
AND CHAR_LENGTH (LEFT ( t.YAB003, #{size} )) = #{size}
<if test="year != null">
AND m.AIAX0059 = #{year}
</if>
<if test="type != null and type != ''">
AND m.AIAX0001 = #{type}
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND t.YAB003 LIKE CONCAT( #{subAreaCode}, '%' )
</if>
GROUP BY
LEFT ( t.YAB003, #{size} ), m.AIAX0001
</select>
<!--获取跨地婚姻统计-->
<select id="getCrossMarriageStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
COUNT( 1 ) 'num',
m.AIAX0001 'type'
FROM
mrcase m LEFT JOIN taorg t ON m.AIAX0003 = t.ORGID
WHERE
m.AIAX0072 = '1'
AND m.BIAX0075 = '1'
AND LEFT(m.AIAP0013,4) != LEFT(t.YAB003,4)
AND LEFT(m.AIAP0014,4) != LEFT(t.YAB003,4)
<if test="year != null">
AND m.AIAX0059 = #{year}
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND t.YAB003 LIKE CONCAT(#{subAreaCode},'%')
</if>
GROUP BY
m.AIAX0001
</select>
<!--获取离婚中的人数-->
<select id="getInDivorceNum" resultType="com.zq.portal.vo.StatsVo">
SELECT COUNT(1) 'num', m.AIAX0001 'type'
FROM mrcase m LEFT JOIN taorg t ON m.AIAX0003 = t.ORGID
WHERE m.AIAX0001 = 'IB'
AND m.BIAX0075 = '1'
AND m.AIAX0072 != '1'
<if test="year != null">
AND m.AIAX0059 = #{year}
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND t.YAB003 LIKE CONCAT(#{subAreaCode},'%')
</if>
</select>
<!--获取结婚人数-->
<select id="getMarryNum" resultType="com.zq.portal.vo.StatsVo">
SELECT COUNT(1) 'num', m.AIAX0001 'type'
FROM mrcase m JOIN taorg t ON m.AIAX0003 = t.ORGID
WHERE m.AIAX0001 = 'IA'
AND m.BIAX0075 = '1'
AND m.AIAX0072 = '1'
<if test="year != null">
AND m.AIAX0059 = #{year}
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND t.YAB003 LIKE CONCAT(#{subAreaCode},'%')
</if>
</select>
<select id="getMonthDivorceCoolingData" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT (m.AIAX0048, 10),
COUNT (1) 'num'
FROM
mrcheck m
LEFT JOIN mrcheckappend ma
ON m.BIAX0069 = ma.BIAX0069
WHERE
m.AIAX0001 = 'IB'
AND m.AIAX0072 = '1'
AND m.BIAX0015 = '6'
AND ma.COLEENDTIME
&lt; CURDATE()
GROUP BY LEFT (m.AIAX0048, 10)
</select>
<!-- <select id="search" resultType="java.util.Map">-->
<!-- SELECT m.AIAX0001 'businessType', m.AIAP0005 'manName', m.AIAP0006 'girlName', m.AIAP0013 'manIdCard', m.AIAP0014-->
<!-- 'girlIdCard',-->
<!-- m.AIAP0015 'manNationality', m.AIAP0016 'girlNationality', m.AIAP0023 'manState', m.AIAP0024 'girlState',-->
<!-- m.AIAP0027-->
<!-- 'manDomicile', m.AIAP0028 'girlDomicile', m.AIAX0035 'manContact', m.AIAX0036 'girlContact', m.AIAX0059-->
<!-- 'archiveYear',-->
<!-- LEFT (m.AIAX0048, 10) 'registerDate', m.AIAE0004 'orgName'-->
<!-- FROM `mrcase` m LEFT JOIN taorg t ON m.AIAX0003 = t.ORGID-->
<!-- WHERE 1=1-->
<!-- <if test="keyword != null and keyword != ''">-->
<!-- AND (m.AIAP0005 = #{keyword} OR AIAP0006 = #{keyword} OR AIAP0013 = #{keyword} OR AIAP0014 = #{keyword})-->
<!-- </if>-->
<!-- <if test="subAreaCode != null and subAreaCode != ''">-->
<!-- AND t.YAB003 LIKE CONCAT(#{subAreaCode},'%')-->
<!-- </if>-->
<!-- ORDER BY m.AIAX0048 DESC-->
<!-- </select>-->
<select id="search" resultType="java.util.Map">
SELECT businessType, manName, girlName, manIdCard, girlIdCard,
manNationality, girlNationality, manState, girlState, manDomicile,
girlDomicile, manContact, girlContact, archiveYear, registerDate, orgName, areaCode
FROM `search_data`
WHERE 1=1
<if test="keyword != null and keyword != ''">
AND (manName = #{keyword} OR girlName = #{keyword} OR manIdCard = #{keyword} OR girlIdCard = #{keyword})
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND areaCode LIKE CONCAT(#{subAreaCode},'%')
</if>
ORDER BY registerDate DESC
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zq.portal.dao.HyStatsDao">
<select id="getFivesYearMarriageLine" resultType="com.zq.portal.vo.StatsVo">
SELECT COUNT(1) 'num', m.AIAX0001 'type', DATE_FORMAT( m.AIAX0048, "%Y" ) 'year'
FROM mrcase m LEFT JOIN taorg t ON m.AIAX0003 = t.ORGID
WHERE m.AIAX0072 = '1'
AND m.BIAX0075 = '1'
AND DATE_FORMAT(m.AIAX0048, "%Y") &lt;= YEAR(NOW())
AND m.AIAX0001 = #{type}
<if test="subAreaCode != null and subAreaCode != ''">
AND t.YAB003 LIKE CONCAT(#{subAreaCode},'%')
</if>
GROUP BY DATE_FORMAT(m.AIAX0048, "%Y")
ORDER BY DATE_FORMAT(m.AIAX0048, "%Y") DESC LIMIT 5
</select>
<select id="getMonthMarriageLine" resultType="com.zq.portal.vo.StatsVo">
SELECT COUNT(1) 'num', m.AIAX0001 'type', DATE_FORMAT( m.AIAX0048, "%Y-%m" ) 'month'
FROM mrcase m LEFT JOIN taorg t ON m.AIAX0003 = t.ORGID
WHERE m.AIAX0072 = '1'
AND m.BIAX0075 = '1'
AND m.AIAX0001 = #{type}
<if test="subAreaCode != null and subAreaCode != ''">
AND t.YAB003 LIKE CONCAT(#{subAreaCode},'%')
</if>
GROUP BY DATE_FORMAT(m.AIAX0048, '%Y-%m')
ORDER BY DATE_FORMAT(m.AIAX0048, '%Y-%m') DESC LIMIT 12
</select>
<select id="getMarriageStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
COUNT( 1 ) 'num',
m.AIAX0001 'type'
FROM
mrcase m LEFT JOIN taorg t ON m.AIAX0003 = t.ORGID
WHERE
m.AIAX0072 = '1'
AND m.BIAX0075 = '1'
<if test="year != null">
AND m.AIAX0059 = #{year}
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND t.YAB003 LIKE CONCAT(#{subAreaCode},'%')
</if>
GROUP BY
m.AIAX0001
</select>
<!--获取下级区域婚姻统计列表-->
<select id="getAreaUnderMarriageStatsList" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT ( t.YAB003, #{size} ) 'code',
m.AIAX0001 'type' ,
COUNT( 1 ) 'num'
FROM
mrcase m LEFT JOIN taorg t ON m.AIAX0003 = t.ORGID
WHERE
m.AIAX0072 = '1'
AND m.BIAX0075 = '1'
AND CHAR_LENGTH (LEFT ( t.YAB003, #{size} )) = #{size}
<if test="year != null">
AND m.AIAX0059 = #{year}
</if>
<if test="type != null and type != ''">
AND m.AIAX0001 = #{type}
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND t.YAB003 LIKE CONCAT( #{subAreaCode}, '%' )
</if>
GROUP BY
LEFT ( t.YAB003, #{size} ), m.AIAX0001
</select>
<!--获取跨地婚姻统计-->
<select id="getCrossMarriageStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
COUNT( 1 ) 'num',
m.AIAX0001 'type'
FROM
mrcase m LEFT JOIN taorg t ON m.AIAX0003 = t.ORGID
WHERE
m.AIAX0072 = '1'
AND m.BIAX0075 = '1'
AND LEFT(m.AIAP0013,4) != LEFT(t.YAB003,4)
AND LEFT(m.AIAP0014,4) != LEFT(t.YAB003,4)
<if test="year != null">
AND m.AIAX0059 = #{year}
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND t.YAB003 LIKE CONCAT(#{subAreaCode},'%')
</if>
GROUP BY
m.AIAX0001
</select>
<!--获取离婚中的人数-->
<select id="getInDivorceNum" resultType="com.zq.portal.vo.StatsVo">
SELECT COUNT(1) 'num', m.AIAX0001 'type'
FROM mrcase m LEFT JOIN taorg t ON m.AIAX0003 = t.ORGID
WHERE m.AIAX0001 = 'IB'
AND m.BIAX0075 = '1'
AND m.AIAX0072 != '1'
<if test="year != null">
AND m.AIAX0059 = #{year}
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND t.YAB003 LIKE CONCAT(#{subAreaCode},'%')
</if>
</select>
<!--获取结婚人数-->
<select id="getMarryNum" resultType="com.zq.portal.vo.StatsVo">
SELECT COUNT(1) 'num', m.AIAX0001 'type'
FROM mrcase m JOIN taorg t ON m.AIAX0003 = t.ORGID
WHERE m.AIAX0001 = 'IA'
AND m.BIAX0075 = '1'
AND m.AIAX0072 = '1'
<if test="year != null">
AND m.AIAX0059 = #{year}
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND t.YAB003 LIKE CONCAT(#{subAreaCode},'%')
</if>
</select>
<select id="getMonthDivorceCoolingData" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT (m.AIAX0048, 10),
COUNT (1) 'num'
FROM
mrcheck m
LEFT JOIN mrcheckappend ma
ON m.BIAX0069 = ma.BIAX0069
WHERE
m.AIAX0001 = 'IB'
AND m.AIAX0072 = '1'
AND m.BIAX0015 = '6'
AND ma.COLEENDTIME
&lt; CURDATE()
GROUP BY LEFT (m.AIAX0048, 10)
</select>
<!-- <select id="search" resultType="java.util.Map">-->
<!-- SELECT m.AIAX0001 'businessType', m.AIAP0005 'manName', m.AIAP0006 'girlName', m.AIAP0013 'manIdCard', m.AIAP0014-->
<!-- 'girlIdCard',-->
<!-- m.AIAP0015 'manNationality', m.AIAP0016 'girlNationality', m.AIAP0023 'manState', m.AIAP0024 'girlState',-->
<!-- m.AIAP0027-->
<!-- 'manDomicile', m.AIAP0028 'girlDomicile', m.AIAX0035 'manContact', m.AIAX0036 'girlContact', m.AIAX0059-->
<!-- 'archiveYear',-->
<!-- LEFT (m.AIAX0048, 10) 'registerDate', m.AIAE0004 'orgName'-->
<!-- FROM `mrcase` m LEFT JOIN taorg t ON m.AIAX0003 = t.ORGID-->
<!-- WHERE 1=1-->
<!-- <if test="keyword != null and keyword != ''">-->
<!-- AND (m.AIAP0005 = #{keyword} OR AIAP0006 = #{keyword} OR AIAP0013 = #{keyword} OR AIAP0014 = #{keyword})-->
<!-- </if>-->
<!-- <if test="subAreaCode != null and subAreaCode != ''">-->
<!-- AND t.YAB003 LIKE CONCAT(#{subAreaCode},'%')-->
<!-- </if>-->
<!-- ORDER BY m.AIAX0048 DESC-->
<!-- </select>-->
<select id="search" resultType="java.util.Map">
SELECT businessType, manName, girlName, manIdCard, girlIdCard,
manNationality, girlNationality, manState, girlState, manDomicile,
girlDomicile, manContact, girlContact, archiveYear, registerDate, orgName, areaCode
FROM `search_data`
WHERE 1=1
<if test="keyword != null and keyword != ''">
AND (manName = #{keyword} OR girlName = #{keyword} OR manIdCard = #{keyword} OR girlIdCard = #{keyword})
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND areaCode LIKE CONCAT(#{subAreaCode},'%')
</if>
ORDER BY registerDate DESC
</select>
<select id="getYearMarriedCouple" resultType="com.zq.portal.vo.StatsVo">
SELECT
COUNT( 1 )
FROM
MRCASE m
WHERE
1=1
<if test="type != null and type != ''">
AND m.AIAX0001 = #{type}
</if>
AND BIAX0075 = '1'
AND AIAX0072 = '1'
AND DATE_FORMAT(AIAX0048,'%Y%m') >= '202201'
AND DATE_FORMAT(AIAX0048,'%Y%m') &lt;= '202212'
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zq.portal.dao.ShjzStatsDao">
<!-- <select id="search" resultType="java.util.Map">-->
<!-- SELECT AXDF0002 'name', AXDF0004 'mainIdCard', AXDF0011 'phone',AXDF0008 'address', AXAA2701 'unitCode'-->
<!-- ,UPDATETIME 'createTime'-->
<!-- FROM-->
<!-- baf01-->
<!-- WHERE 1 = 1-->
<!-- <choose>-->
<!-- <when test="keyword != null and keyword != ''">-->
<!-- AND (AXDF0002 = #{keyword}-->
<!-- OR AXDF0004 = #{keyword})-->
<!-- </when>-->
<!-- <otherwise>-->
<!-- ORDER BY UPDATETIME DESC LIMIT 20-->
<!-- </otherwise>-->
<!-- </choose>-->
<!-- </select>-->
<select id="search" resultType="java.util.Map">
SELECT
REPLACE(address, '广西壮族自治区-', '') 'address',
NAME 'name',
id_card 'idCard',
help_type 'helpType',
help_amount 'helpAmount',
provide_state 'provideState',
start_provide_date 'startProvideDate',
end_provide_date 'endProvideDate'
FROM
`gw_temptable_20210630`
WHERE 1 = 1
<if test="keyword != null and keyword != ''">
AND (NAME = #{keyword}
OR id_card = #{keyword})
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND id_card LIKE CONCAT(#{subAreaCode},'%')
</if>
ORDER BY start_provide_date DESC
</select>
<select id="getEnjoyNum" resultType="com.zq.portal.vo.StatsVo">
SELECT
( CASE h.ISCITY
WHEN 0 THEN '农村低保'
WHEN 1 THEN '城市低保'
WHEN 6 THEN '特困供养'
WHEN 10 THEN '农村低收入'
WHEN 11 THEN '城市低收入'
WHEN 21 THEN '住房救助'
WHEN 31 THEN '城市特困'
ELSE '其他' END ) 'type',
SUM( h.SURE_POPULATION ) 'num'
FROM ENBUZ_APPLY_HOME h
WHERE h.VP_STATE = 4
<if test="subAreaCode != null and subAreaCode != ''">
AND h.UNIT_ID LIKE CONCAT(#{subAreaCode}, '%')
</if>
AND DATE_FORMAT( h.PERMIT_DATE, "%Y-%m-%d" ) &lt;= #{date}
AND DATE_FORMAT( h.STOP_DATE, "%Y-%m-%d" ) >= #{date}
GROUP BY
ISCITY
</select>
<select id="getTemporaryNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT(h.UNIT_ID, 4) 'code',
SUM(h.SURE_POPULATION ) 'num'
FROM
tem_home_his h
WHERE
h.VP_STATE = 4
<if test="subAreaCode != null and subAreaCode != ''">
AND h.UNIT_ID LIKE CONCAT(#{subAreaCode}, '%')
</if>
<choose>
<when test="year != null">
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) = #{year}
</when>
<otherwise>
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) = DATE_FORMAT(NOW(), "%Y" )
</otherwise>
</choose>
</select>
<select id="getBorderNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT(h.UNIT_ID, #{size}) 'code',
sum( h.SURE_POPULATION ) 'num'
FROM
border_region_home h
WHERE h.VP_STATE = 4
AND h.ISCITY = 8
<if test="subAreaCode != null and subAreaCode != ''">
AND h.UNIT_ID LIKE CONCAT(#{subAreaCode}, '%')
</if>
<choose>
<when test="year != null">
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) = #{year}
</when>
<otherwise>
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) = DATE_FORMAT(NOW(), "%Y" )
</otherwise>
</choose>
</select>
<select id="getAreaUnderNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT(h.UNIT_ID, #{size}) 'code',
h.ISCITY 'type',
SUM( h.SURE_POPULATION ) 'num'
FROM
ENBUZ_APPLY_HOME h
WHERE h.VP_STATE = 4
AND LEFT(h.UNIT_ID, #{size}) IS NOT NULL
<if test="subAreaCode != null and subAreaCode != ''">
AND h.UNIT_ID LIKE CONCAT(#{subAreaCode}, '%')
</if>
<if test="type != null and type != ''">
AND h.ISCITY = #{type}
</if>
AND DATE_FORMAT( h.PERMIT_DATE, "%Y-%m-%d" ) &lt;= '2021-12-01'
AND DATE_FORMAT( h.STOP_DATE, "%Y-%m-%d" ) >= '2021-12-01'
GROUP BY
LEFT(h.UNIT_ID, #{size}),
type
</select>
<select id="getAreaTotalNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
h.ISCITY 'type',
SUM( h.SURE_POPULATION ) 'num'
FROM
ENBUZ_APPLY_HOME h
WHERE h.VP_STATE = 4
AND DATE_FORMAT( h.PERMIT_DATE, "%Y-%m-%d" ) &lt;= '2021-12-01'
AND DATE_FORMAT( h.STOP_DATE, "%Y-%m-%d" ) >= '2021-12-01'
AND h.ISCITY IN(0,1)
GROUP BY
type
</select>
<!--
SELECT DATE_FORMAT(h.PERMIT_DATE, "%Y-%m") 'date',
( CASE h.ISCITY
WHEN 0 THEN '农村低保'
WHEN 1 THEN '城市低保'
WHEN 6 THEN '特困供养'
WHEN 10 THEN '农村低收入'
WHEN 11 THEN '城市低收入'
WHEN 21 THEN '住房救助'
WHEN 31 THEN '城市特困'
ELSE '其他' END ) 'type',
SUM( h.SURE_POPULATION ) 'num'
FROM ENBUZ_APPLY_HOME h
WHERE h.VP_STATE = 4
AND h.ISCITY IN(0, 1)
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) > DATE_FORMAT(NOW(), "%Y" ) - 5
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) &lt;= DATE_FORMAT(NOW(), "%Y" )
AND DATE_FORMAT( h.PERMIT_DATE, "%Y-%m" ) &lt;= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MONTH), "%Y-%m")
AND h.UNIT_ID LIKE CONCAT('45', '%')
GROUP BY
DATE_FORMAT( h.PERMIT_DATE, "%Y-%m" ),
ISCITY
-->
<select id="getFivesYearEnjoyStats" resultType="com.zq.portal.vo.StatsVo">
SELECT LEFT(date, 4) 'year', type, SUM(num) 'num' FROM ( SELECT DATE_FORMAT(h.PERMIT_DATE, "%Y-%m") 'date',
( CASE h.ISCITY
WHEN 0 THEN '农村低保'
WHEN 1 THEN '城市低保'
WHEN 6 THEN '特困供养'
WHEN 10 THEN '农村低收入'
WHEN 11 THEN '城市低收入'
WHEN 21 THEN '住房救助'
WHEN 31 THEN '城市特困'
ELSE '其他' END ) 'type',
SUM( h.SURE_POPULATION ) 'num'
FROM ENBUZ_APPLY_HOME h
WHERE h.VP_STATE = 4
AND h.ISCITY IN(0, 1)
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) > DATE_FORMAT(NOW(), "%Y" ) - 5
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) &lt;= DATE_FORMAT(NOW(), "%Y" )
<if test="subAreaCode != null and subAreaCode != ''">
AND h.UNIT_ID LIKE CONCAT(#{subAreaCode}, '%')
</if>
GROUP BY
DATE_FORMAT( h.PERMIT_DATE, "%Y-%m" ),
ISCITY) t
WHERE type IN("城市低保","农村低保")
GROUP BY
LEFT(date, 4),
type
</select>
<select id="getPeopleNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT ( a.area_code, #{size} ) 'code',
a.type 'type',
SUM(a.people_num) 'num'
FROM city_coutry_2021 a
WHERE
CHAR_LENGTH (LEFT ( a.area_code, #{size} )) = #{size}
<if test="subAreaCode != null and subAreaCode != ''">
AND a.area_code LIKE CONCAT(#{subAreaCode}, '%')
</if>
<if test="type != null and type != ''">
AND a.type = #{type}
</if>
GROUP BY
LEFT ( a.area_code, #{size} ),
a.type
</select>
<!-- iscity = 1 是城市 0是农村 -->
<select id="getMonyNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT(p.unit_id, #{size}) 'code',
p.iscity 'type',
SUM( p.money ) 'amount'
FROM
mon_pay p
WHERE
p.pay_state = 2
AND p.vp_state = 4
AND DATE_FORMAT( p.pmonth, "%Y-%m-%d" ) >= '2021-12-01'
AND DATE_FORMAT( p.pmonth, "%Y-%m-%d" ) &lt;= '2021-12-01'
AND CHAR_LENGTH (LEFT ( p.unit_id, #{size} )) = #{size}
<if test="subAreaCode != null and subAreaCode != ''">
AND p.unit_id LIKE CONCAT(#{subAreaCode}, '%')
</if>
<if test="type != null and type != ''">
AND p.iscity = #{type}
</if>
GROUP BY
LEFT(p.unit_id, #{size}),
p.iscity
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zq.portal.dao.ShjzStatsDao">
<!-- <select id="search" resultType="java.util.Map">-->
<!-- SELECT AXDF0002 'name', AXDF0004 'mainIdCard', AXDF0011 'phone',AXDF0008 'address', AXAA2701 'unitCode'-->
<!-- ,UPDATETIME 'createTime'-->
<!-- FROM-->
<!-- baf01-->
<!-- WHERE 1 = 1-->
<!-- <choose>-->
<!-- <when test="keyword != null and keyword != ''">-->
<!-- AND (AXDF0002 = #{keyword}-->
<!-- OR AXDF0004 = #{keyword})-->
<!-- </when>-->
<!-- <otherwise>-->
<!-- ORDER BY UPDATETIME DESC LIMIT 20-->
<!-- </otherwise>-->
<!-- </choose>-->
<!-- </select>-->
<select id="search" resultType="java.util.Map">
SELECT
REPLACE(address, '广西壮族自治区-', '') 'address',
NAME 'name',
id_card 'idCard',
help_type 'helpType',
help_amount 'helpAmount',
provide_state 'provideState',
start_provide_date 'startProvideDate',
end_provide_date 'endProvideDate'
FROM
`gw_temptable_20210630`
WHERE 1 = 1
<if test="keyword != null and keyword != ''">
AND (NAME = #{keyword}
OR id_card = #{keyword})
</if>
<if test="subAreaCode != null and subAreaCode != ''">
AND id_card LIKE CONCAT(#{subAreaCode},'%')
</if>
ORDER BY start_provide_date DESC
</select>
<select id="getEnjoyNum" resultType="com.zq.portal.vo.StatsVo">
SELECT
( CASE h.ISCITY
WHEN 0 THEN '农村低保'
WHEN 1 THEN '城市低保'
WHEN 6 THEN '特困供养'
WHEN 10 THEN '农村低收入'
WHEN 11 THEN '城市低收入'
WHEN 21 THEN '住房救助'
WHEN 31 THEN '城市特困'
ELSE '其他' END ) 'type',
SUM( h.SURE_POPULATION ) 'num'
FROM ENBUZ_APPLY_HOME h
WHERE h.VP_STATE = 4
<if test="subAreaCode != null and subAreaCode != ''">
AND h.UNIT_ID LIKE CONCAT(#{subAreaCode}, '%')
</if>
AND DATE_FORMAT( h.PERMIT_DATE, "%Y-%m-%d" ) &lt;= #{date}
AND DATE_FORMAT( h.STOP_DATE, "%Y-%m-%d" ) >= #{date}
GROUP BY
ISCITY
</select>
<select id="getTemporaryNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT(h.UNIT_ID, 4) 'code',
SUM(h.SURE_POPULATION ) 'num'
FROM
tem_home_his h
WHERE
h.VP_STATE = 4
<if test="subAreaCode != null and subAreaCode != ''">
AND h.UNIT_ID LIKE CONCAT(#{subAreaCode}, '%')
</if>
<choose>
<when test="year != null">
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) = #{year}
</when>
<otherwise>
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) = DATE_FORMAT(NOW(), "%Y" )
</otherwise>
</choose>
</select>
<select id="getBorderNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT(h.UNIT_ID, #{size}) 'code',
sum( h.SURE_POPULATION ) 'num'
FROM
border_region_home h
WHERE h.VP_STATE = 4
AND h.ISCITY = 8
<if test="subAreaCode != null and subAreaCode != ''">
AND h.UNIT_ID LIKE CONCAT(#{subAreaCode}, '%')
</if>
<choose>
<when test="year != null">
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) = #{year}
</when>
<otherwise>
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) = DATE_FORMAT(NOW(), "%Y" )
</otherwise>
</choose>
</select>
<select id="getAreaUnderNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT(h.UNIT_ID, #{size}) 'code',
h.ISCITY 'type',
SUM( h.SURE_POPULATION ) 'num'
FROM
ENBUZ_APPLY_HOME h
WHERE h.VP_STATE = 4
AND LEFT(h.UNIT_ID, #{size}) IS NOT NULL
<if test="subAreaCode != null and subAreaCode != ''">
AND h.UNIT_ID LIKE CONCAT(#{subAreaCode}, '%')
</if>
<if test="type != null and type != ''">
AND h.ISCITY = #{type}
</if>
AND DATE_FORMAT( h.PERMIT_DATE, "%Y-%m-%d" ) &lt;= '2021-12-01'
AND DATE_FORMAT( h.STOP_DATE, "%Y-%m-%d" ) >= '2021-12-01'
GROUP BY
LEFT(h.UNIT_ID, #{size}),
type
</select>
<select id="getAreaTotalNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
h.ISCITY 'type',
SUM( h.SURE_POPULATION ) 'num'
FROM
ENBUZ_APPLY_HOME h
WHERE h.VP_STATE = 4
AND DATE_FORMAT( h.PERMIT_DATE, "%Y-%m-%d" ) &lt;= '2021-12-01'
AND DATE_FORMAT( h.STOP_DATE, "%Y-%m-%d" ) >= '2021-12-01'
AND h.ISCITY IN(0,1)
GROUP BY
type
</select>
<!--
SELECT DATE_FORMAT(h.PERMIT_DATE, "%Y-%m") 'date',
( CASE h.ISCITY
WHEN 0 THEN '农村低保'
WHEN 1 THEN '城市低保'
WHEN 6 THEN '特困供养'
WHEN 10 THEN '农村低收入'
WHEN 11 THEN '城市低收入'
WHEN 21 THEN '住房救助'
WHEN 31 THEN '城市特困'
ELSE '其他' END ) 'type',
SUM( h.SURE_POPULATION ) 'num'
FROM ENBUZ_APPLY_HOME h
WHERE h.VP_STATE = 4
AND h.ISCITY IN(0, 1)
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) > DATE_FORMAT(NOW(), "%Y" ) - 5
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) &lt;= DATE_FORMAT(NOW(), "%Y" )
AND DATE_FORMAT( h.PERMIT_DATE, "%Y-%m" ) &lt;= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MONTH), "%Y-%m")
AND h.UNIT_ID LIKE CONCAT('45', '%')
GROUP BY
DATE_FORMAT( h.PERMIT_DATE, "%Y-%m" ),
ISCITY
-->
<select id="getFivesYearEnjoyStats" resultType="com.zq.portal.vo.StatsVo">
SELECT LEFT(date, 4) 'year', type, SUM(num) 'num' FROM ( SELECT DATE_FORMAT(h.PERMIT_DATE, "%Y-%m") 'date',
( CASE h.ISCITY
WHEN 0 THEN '农村低保'
WHEN 1 THEN '城市低保'
WHEN 6 THEN '特困供养'
WHEN 10 THEN '农村低收入'
WHEN 11 THEN '城市低收入'
WHEN 21 THEN '住房救助'
WHEN 31 THEN '城市特困'
ELSE '其他' END ) 'type',
SUM( h.SURE_POPULATION ) 'num'
FROM ENBUZ_APPLY_HOME h
WHERE h.VP_STATE = 4
AND h.ISCITY IN(0, 1)
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) > DATE_FORMAT(NOW(), "%Y" ) - 5
AND DATE_FORMAT( h.PERMIT_DATE, "%Y" ) &lt;= DATE_FORMAT(NOW(), "%Y" )
<if test="subAreaCode != null and subAreaCode != ''">
AND h.UNIT_ID LIKE CONCAT(#{subAreaCode}, '%')
</if>
GROUP BY
DATE_FORMAT( h.PERMIT_DATE, "%Y-%m" ),
ISCITY) t
WHERE type IN("城市低保","农村低保")
GROUP BY
LEFT(date, 4),
type
</select>
<select id="getPeopleNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT ( a.area_code, #{size} ) 'code',
a.type 'type',
SUM(a.people_num) 'num'
FROM city_coutry a
WHERE
CHAR_LENGTH (LEFT ( a.area_code, #{size} )) = #{size}
<if test="subAreaCode != null and subAreaCode != ''">
AND a.area_code LIKE CONCAT(#{subAreaCode}, '%')
</if>
<if test="type != null and type != ''">
AND a.type = #{type}
</if>
GROUP BY
LEFT ( a.area_code, #{size} ),
a.type
</select>
<!-- iscity = 1 是城市 0是农村 -->
<select id="getMonyNumStats" resultType="com.zq.portal.vo.StatsVo">
SELECT
LEFT(p.unit_id, #{size}) 'code',
p.iscity 'type',
SUM( p.money ) 'amount'
FROM
mon_pay p
WHERE
p.pay_state = 2
AND p.vp_state = 4
AND DATE_FORMAT( p.pmonth, "%Y-%m-%d" ) >= '2021-12-01'
AND DATE_FORMAT( p.pmonth, "%Y-%m-%d" ) &lt;= '2021-12-01'
AND CHAR_LENGTH (LEFT ( p.unit_id, #{size} )) = #{size}
<if test="subAreaCode != null and subAreaCode != ''">
AND p.unit_id LIKE CONCAT(#{subAreaCode}, '%')
</if>
<if test="type != null and type != ''">
AND p.iscity = #{type}
</if>
GROUP BY
LEFT(p.unit_id, #{size}),
p.iscity
</select>
</mapper>
package com.zq.resource.controller;
import com.zq.common.utils.AssertUtils;
import com.zq.common.vo.IdVo;
import com.zq.common.vo.PageVo;
import com.zq.common.vo.ResultVo;
import com.zq.resource.entity.OrgDept;
import com.zq.resource.service.DeptService;
import com.zq.resource.vo.OrgDeptFindVo;
import com.zq.resource.vo.OrgDeptVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author wilmiam
* @since 2021/8/19 14:33
*/
@Api(tags = "机构部门相关接口")
@RequiredArgsConstructor
@RestController
@RequestMapping(value = "/resource/dept")
public class DeptController {
private final DeptService deptService;
@ApiOperation("获取机构列表")
@PostMapping(value = "/getDeptList")
public ResultVo<PageVo<OrgDept>> getDeptList(@RequestBody OrgDeptFindVo vo) {
vo.setState(1);
return ResultVo.success(deptService.getDeptList(vo));
}
@ApiOperation("获取机构信息")
@GetMapping(value = "/getDeptInfo/{deptId}")
public ResultVo<OrgDeptVo> getDeptInfo(@PathVariable String deptId) {
AssertUtils.notNull(deptId, "缺少机构ID");
return ResultVo.success(deptService.getDeptInfo(deptId));
}
@ApiOperation("根据部门PID查询子机构")
@GetMapping(value = "/getDeptByPid/{parentId}")
public ResultVo<List<OrgDept>> getDeptByPid(@PathVariable String parentId) {
return ResultVo.success(deptService.getDeptByPid(parentId));
}
@ApiOperation("添加机构")
@PostMapping(value = "/addDept")
public ResultVo addDept(@RequestBody OrgDept vo) {
AssertUtils.hasText(vo.getDeptName(), "缺少机构名称");
AssertUtils.hasText(vo.getCreditCode(), "缺少部门的统一信用代码");
deptService.addDept(vo);
return ResultVo.success();
}
@ApiOperation("修改机构")
@PostMapping(value = "/modifyDept")
public ResultVo modifyDept(@RequestBody OrgDept vo) {
AssertUtils.hasText(vo.getId(), "ID不能为空");
deptService.modifyDept(vo);
return ResultVo.success();
}
@ApiOperation("获取机构树")
@GetMapping(value = "/getDeptTree")
public ResultVo getDeptTree() {
return ResultVo.success(deptService.getDeptTree());
}
@ApiOperation("机构注册")
@PostMapping(value = "/share/registerDept")
public ResultVo registerDept(@RequestBody IdVo vo) {
AssertUtils.notEmpty(vo.getIds(), "至少选择一项");
deptService.registerDept(vo.getIds());
return ResultVo.success();
}
}
package com.zq.resource.controller;
import com.zq.common.annotation.AnonymousAccess;
import com.zq.common.utils.AssertUtils;
import com.zq.common.vo.IdVo;
import com.zq.common.vo.PageVo;
import com.zq.common.vo.ResultVo;
import com.zq.resource.entity.OrgDept;
import com.zq.resource.service.DeptService;
import com.zq.resource.vo.OrgDeptFindVo;
import com.zq.resource.vo.OrgDeptVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author wilmiam
* @since 2021/8/19 14:33
*/
@Api(tags = "机构部门相关接口")
@RequiredArgsConstructor
@RestController
@RequestMapping(value = "/resource/dept")
public class DeptController {
private final DeptService deptService;
@ApiOperation("获取机构列表")
@PostMapping(value = "/getDeptList")
public ResultVo<PageVo<OrgDept>> getDeptList(@RequestBody OrgDeptFindVo vo) {
vo.setState(1);
return ResultVo.success(deptService.getDeptList(vo));
}
@ApiOperation("获取机构信息")
@GetMapping(value = "/getDeptInfo/{deptId}")
public ResultVo<OrgDeptVo> getDeptInfo(@PathVariable String deptId) {
AssertUtils.notNull(deptId, "缺少机构ID");
return ResultVo.success(deptService.getDeptInfo(deptId));
}
@ApiOperation("根据部门PID查询子机构")
@GetMapping(value = "/getDeptByPid/{parentId}")
public ResultVo<List<OrgDept>> getDeptByPid(@PathVariable String parentId) {
return ResultVo.success(deptService.getDeptByPid(parentId));
}
@ApiOperation("添加机构")
@PostMapping(value = "/addDept")
public ResultVo addDept(@RequestBody OrgDept vo) {
AssertUtils.hasText(vo.getDeptName(), "缺少机构名称");
AssertUtils.hasText(vo.getCreditCode(), "缺少部门的统一信用代码");
deptService.addDept(vo);
return ResultVo.success();
}
@ApiOperation("修改机构")
@PostMapping(value = "/modifyDept")
public ResultVo modifyDept(@RequestBody OrgDept vo) {
AssertUtils.hasText(vo.getId(), "ID不能为空");
deptService.modifyDept(vo);
return ResultVo.success();
}
@ApiOperation("获取机构树")
@GetMapping(value = "/getDeptTree")
public ResultVo getDeptTree() {
return ResultVo.success(deptService.getDeptTree());
}
@ApiOperation("机构注册")
@PostMapping(value = "/share/registerDept")
@AnonymousAccess
public ResultVo registerDept(@RequestBody IdVo vo) {
AssertUtils.notEmpty(vo.getIds(), "至少选择一项");
deptService.registerDept(vo.getIds());
return ResultVo.success();
}
}
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.zq.system.modules.system.service;
import com.zq.system.modules.tools.domain.vo.EmailVo;
/**
* @author Zheng Jie
* @date 2018-12-26
*/
public interface VerifyService {
/**
* 发送验证码
*
* @param email /
* @param key /
* @return /
*/
EmailVo sendEmail(String email, String key);
/**
* 验证
*
* @param code /
* @param key /
*/
void validated(String key, String code);
}
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.zq.system.modules.system.service;
import com.zq.system.modules.tools.domain.vo.EmailVo;
/**
* @author Zheng Jie
* @date 2018-12-26
*/
public interface VerifyService {
/**
* 发送验证码
*
* @param email /
* @param key /
* @return /
*/
EmailVo sendEmail(String email, String key);
/**
* 验证
*
* @param code /
* @param key /
*/
void validated(String key, String code);
}
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.zq.system.modules.system.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zq.common.config.redis.RedisUtils;
import com.zq.common.config.security.ApiTokenUtils;
import com.zq.common.constant.SystemName;
import com.zq.common.utils.AssertUtils;
import com.zq.common.utils.StringUtils;
import com.zq.common.utils.UploadUtils;
import com.zq.common.vo.ApiTokenVo;
import com.zq.system.config.CacheKeys;
import com.zq.system.config.FileProperties;
import com.zq.system.exception.EntityExistException;
import com.zq.system.exception.EntityNotFoundException;
import com.zq.system.modules.system.dao.PfuserDao;
import com.zq.system.modules.system.domain.Job;
import com.zq.system.modules.system.domain.Role;
import com.zq.system.modules.system.domain.User;
import com.zq.system.modules.system.domain.vo.LoginVo;
import com.zq.system.modules.system.entity.Pfuser;
import com.zq.system.modules.system.repository.DeptRepository;
import com.zq.system.modules.system.repository.JobRepository;
import com.zq.system.modules.system.repository.RoleRepository;
import com.zq.system.modules.system.repository.UserRepository;
import com.zq.system.modules.system.service.OnlineUserService;
import com.zq.system.modules.system.service.UserCacheClean;
import com.zq.system.modules.system.service.UserService;
import com.zq.system.modules.system.service.dto.JobSmallDto;
import com.zq.system.modules.system.service.dto.RoleSmallDto;
import com.zq.system.modules.system.service.dto.UserDto;
import com.zq.system.modules.system.service.dto.UserQueryCriteria;
import com.zq.system.modules.system.service.mapstruct.UserMapper;
import com.zq.system.utils.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotBlank;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author Zheng Jie
* @date 2018-11-23
*/
@Slf4j
@Service
@RequiredArgsConstructor
@CacheConfig(cacheNames = "user")
public class UserServiceImpl implements UserService {
private final UserRepository userRepository;
private final UserMapper userMapper;
private final FileProperties properties;
private final RedisUtils redisUtils;
private final UserCacheClean userCacheClean;
private final OnlineUserService onlineUserService;
private final PfuserDao pfuserDao;
private final PasswordEncoder passwordEncoder;
private final DeptRepository deptRepository;
private final RoleRepository roleRepository;
private final JobRepository jobRepository;
@Override
public Object queryAll(UserQueryCriteria criteria, Pageable pageable) {
Page<User> page = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable);
return PageUtil.toPage(page.map(userMapper::toDto));
}
@Override
public List<UserDto> queryAll(UserQueryCriteria criteria) {
List<User> users = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder));
return userMapper.toDto(users);
}
@Override
@Cacheable(key = "'id:' + #p0")
@Transactional(rollbackFor = Exception.class)
public UserDto findById(long id) {
User user = userRepository.findById(id).orElseGet(User::new);
ValidationUtil.isNull(user.getId(), "User", "id", id);
return userMapper.toDto(user);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(User resources) {
if (userRepository.findByUsername(resources.getUsername()) != null) {
throw new EntityExistException(User.class, "username", resources.getUsername());
}
if (StringUtils.isNotBlank(resources.getEmail()) && userRepository.findByEmail(resources.getEmail()) != null) {
throw new EntityExistException(User.class, "email", resources.getEmail());
}
if (userRepository.findByPhone(resources.getPhone()) != null) {
throw new EntityExistException(User.class, "phone", resources.getPhone());
}
userRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(User resources) throws Exception {
User user = userRepository.findById(resources.getId()).orElseGet(User::new);
ValidationUtil.isNull(user.getId(), "User", "id", resources.getId());
User user1 = userRepository.findByUsername(resources.getUsername());
User user2 = userRepository.findByEmail(resources.getEmail());
User user3 = userRepository.findByPhone(resources.getPhone());
if (user1 != null && !user.getId().equals(user1.getId())) {
throw new EntityExistException(User.class, "username", resources.getUsername());
}
if (user2 != null && !user.getId().equals(user2.getId())) {
throw new EntityExistException(User.class, "email", resources.getEmail());
}
if (user3 != null && !user.getId().equals(user3.getId())) {
throw new EntityExistException(User.class, "phone", resources.getPhone());
}
// 如果用户的角色改变
if (!resources.getRoles().equals(user.getRoles())) {
redisUtils.del(CacheKey.DATA_USER + resources.getId());
redisUtils.del(CacheKey.MENU_USER + resources.getId());
redisUtils.del(CacheKey.ROLE_AUTH + resources.getId());
}
// 如果用户被禁用,则清除用户登录信息
if (!resources.getEnabled()) {
onlineUserService.kickOutForUsername(resources.getUsername());
}
user.setUsername(resources.getUsername());
user.setEmail(resources.getEmail());
user.setEnabled(resources.getEnabled());
user.setRoles(resources.getRoles());
user.setDept(resources.getDept());
user.setJobs(resources.getJobs());
user.setPhone(resources.getPhone());
user.setNickName(resources.getNickName());
user.setGender(resources.getGender());
userRepository.save(user);
// 清除缓存
delCaches(user.getId(), user.getUsername());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateCenter(User resources) {
User user = userRepository.findById(resources.getId()).orElseGet(User::new);
User user1 = userRepository.findByPhone(resources.getPhone());
if (user1 != null && !user.getId().equals(user1.getId())) {
throw new EntityExistException(User.class, "phone", resources.getPhone());
}
user.setNickName(resources.getNickName());
user.setPhone(resources.getPhone());
user.setGender(resources.getGender());
userRepository.save(user);
// 清理缓存
delCaches(user.getId(), user.getUsername());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Set<Long> ids) {
for (Long id : ids) {
// 清理缓存
UserDto user = findById(id);
delCaches(user.getId(), user.getUsername());
}
userRepository.deleteAllByIdIn(ids);
}
@Override
public UserDto findByName(String userName) {
User user = userRepository.findByUsername(userName);
if (user == null) {
throw new EntityNotFoundException(User.class, "name", userName);
} else {
return userMapper.toDto(user);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updatePass(String username, String pass) {
userRepository.updatePass(username, pass, new Date());
flushCache(username);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Map<String, String> updateAvatar(MultipartFile multipartFile) {
User user = userRepository.findByUsername(SecurityUtils.getCurrentUsername());
String oldPath = user.getAvatarPath();
String imaUrl = UploadUtils.saveImg(multipartFile, SystemName.SYS);
user.setAvatarPath(imaUrl);
user.setAvatarName(imaUrl);
userRepository.save(user);
if (StringUtils.isNotBlank(oldPath)) {
FileUtil.del(oldPath);
}
@NotBlank String username = user.getUsername();
flushCache(username);
return new HashMap<String, String>(1) {{
put("avatar", imaUrl);
}};
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateEmail(String username, String email) {
userRepository.updateEmail(username, email);
flushCache(username);
}
@Override
public void download(List<UserDto> queryAll, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (UserDto userDTO : queryAll) {
List<String> roles = userDTO.getRoles().stream().map(RoleSmallDto::getName).collect(Collectors.toList());
Map<String, Object> map = new LinkedHashMap<>();
map.put("用户名", userDTO.getUsername());
map.put("角色", roles);
map.put("部门", userDTO.getDept().getName());
map.put("岗位", userDTO.getJobs().stream().map(JobSmallDto::getName).collect(Collectors.toList()));
map.put("邮箱", userDTO.getEmail());
map.put("状态", userDTO.getEnabled() ? "启用" : "禁用");
map.put("手机号码", userDTO.getPhone());
map.put("修改密码的时间", userDTO.getPwdResetTime());
map.put("创建日期", userDTO.getCreateTime());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
/**
* 清理缓存
*
* @param id /
*/
public void delCaches(Long id, String username) {
redisUtils.del(CacheKey.USER_ID + id);
flushCache(username);
}
/**
* 清理 登陆时 用户缓存信息
*
* @param username /
*/
private void flushCache(String username) {
userCacheClean.cleanUserCache(username);
}
@Override
public void sendCode(String phone) {
User user = userRepository.findByUsername(phone);
if (user == null) {
Pfuser pfuser = pfuserDao.selectOne(Wrappers.lambdaQuery(Pfuser.builder().phone(phone).build()));
AssertUtils.notNull(pfuser, "手机号不存在");
}
String code = RandomUtil.randomNumbers(6);
String content = "您的验证码为:" + code + "(5分钟内有效)。为了保障信息安全,如非本人操作请忽略本短信。";
boolean sendMsg = MobileSmsUtils.sendMsg(phone, content);
log.info(">> phone: {}, sendCode: {}, success: {}", phone, code, sendMsg);
redisUtils.setStr(CacheKeys.authCodeKey(phone), code, 5);
}
@Override
public void resetPassword(LoginVo vo) {
verificationCode(vo.getPhone(), vo.getVerifyCode());
User user = userRepository.findByUsername(vo.getPhone());
if (user == null) {
user = addUser(vo.getPhone());
}
AssertUtils.notNull(user, "手机号不存在");
updatePass(user.getUsername(), passwordEncoder.encode(vo.getPasswd()));
}
/**
* 保存用户
*
* @param phone
* @return
*/
private User addUser(String phone) {
Pfuser pfuser = pfuserDao.selectOne(Wrappers.lambdaQuery(Pfuser.builder().phone(phone).build()));
if (pfuser == null) {
return null;
}
User user = userRepository.findByUsername(phone);
if (user == null) {
user = new User();
List<Role> roleList = roleRepository.findAllById(Collections.singletonList(2L));
user.setRoles(new HashSet<>(roleList));
List<Job> jobList = jobRepository.findAllById(Collections.singletonList(13L));
user.setJobs(new HashSet<>(jobList));
deptRepository.findById(8L).ifPresent(user::setDept);
user.setUsername(phone);
user.setNickName(pfuser.getUsername());
user.setGender(pfuser.getSex() == null ? "未知" : pfuser.getSex() == 0 ? "男" : "女");
user.setPhone(phone);
user.setEmail(pfuser.getSourcemail());
user.setPassword(passwordEncoder.encode("gxmz!23"));
user.setIsAdmin(false);
user.setEnabled(true);
user.setCreateBy("admin");
user.setUpdatedBy("admin");
user.setCreateTime(DateUtil.date().toTimestamp());
user.setUpdateTime(DateUtil.date().toTimestamp());
create(user);
}
return user;
}
/**
* 判断验证码
*
* @param phone
* @param code
*/
public void verificationCode(String phone, String code) {
String cacheCode = redisUtils.getStr(CacheKeys.authCodeKey(phone));
AssertUtils.isTrue(org.apache.commons.lang3.StringUtils.isNotBlank(cacheCode) && cacheCode.equalsIgnoreCase(code), "验证码错误");
redisUtils.deleteStr(CacheKeys.authCodeKey(phone));
}
@Override
public void modifyPasswd(LoginVo vo) {
verificationCode(vo.getPhone(), vo.getVerifyCode());
User user = userRepository.findByUsername(vo.getPhone());
AssertUtils.notNull(user, "手机号不存在");
updatePass(user.getUsername(), passwordEncoder.encode(vo.getPasswd()));
}
@Override
public ApiTokenVo phoneLogin(LoginVo vo) {
User user = userRepository.findByUsername(vo.getPhone());
if (user == null) {
user = addUser(vo.getPhone());
}
AssertUtils.notNull(user, "手机号不存在");
verificationCode(vo.getPhone(), vo.getVerifyCode());
AssertUtils.isTrue(user.getEnabled(), "账号已禁用");
return getApiToken(user);
}
/**
* 获取ApiToken
*
* @param user
* @return
*/
private ApiTokenVo getApiToken(User user) {
ApiTokenVo tokenVo = ApiTokenVo.builder()
.userId(user.getId())
.phone(user.getPhone())
.username(user.getUsername())
.name(user.getNickName())
.nickname(user.getNickName())
.sex(user.getGender())
.avatar(user.getAvatarPath())
.build();
String token = ApiTokenUtils.createToken(tokenVo, CacheKeys.APP_TOKEN_EXPIRE_MINUTES);
tokenVo.setToken(token);
// 重新登录删除前一个token实现单机登录
String cacheToken = redisUtils.getStr(CacheKeys.liveAppTokenKey(user.getId().toString()));
redisUtils.deleteObj(CacheKeys.appTokenKey(cacheToken));
redisUtils.deleteStr(CacheKeys.liveAppTokenKey(user.getId().toString()));
// 缓存登录用户
redisUtils.setObj(CacheKeys.appTokenKey(token), tokenVo, CacheKeys.APP_TOKEN_EXPIRE_MINUTES);
// 用户ID作为key保存token, 再次登录可以找出该用户的token
redisUtils.setStr(CacheKeys.liveAppTokenKey(user.getId().toString()), token, CacheKeys.APP_TOKEN_EXPIRE_MINUTES);
return tokenVo;
}
@Override
public ApiTokenVo passwdLogin(LoginVo vo) {
User user = userRepository.findByUsername(vo.getPhone());
AssertUtils.notNull(user, "手机号不存在");
AssertUtils.hasText(user.getPassword(), "未设置密码");
AssertUtils.isTrue(passwordEncoder.matches(vo.getPasswd(), user.getPassword()), "密码错误");
AssertUtils.isTrue(user.getEnabled(), "账号已禁用");
return getApiToken(user);
}
}
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.zq.system.modules.system.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zq.common.config.redis.RedisUtils;
import com.zq.common.config.security.ApiTokenUtils;
import com.zq.common.constant.SystemName;
import com.zq.common.utils.AssertUtils;
import com.zq.common.utils.StringUtils;
import com.zq.common.utils.UploadUtils;
import com.zq.common.vo.ApiTokenVo;
import com.zq.system.config.CacheKeys;
import com.zq.system.config.FileProperties;
import com.zq.system.exception.EntityExistException;
import com.zq.system.exception.EntityNotFoundException;
import com.zq.system.modules.system.dao.PfuserDao;
import com.zq.system.modules.system.domain.Job;
import com.zq.system.modules.system.domain.Role;
import com.zq.system.modules.system.domain.User;
import com.zq.system.modules.system.domain.vo.LoginVo;
import com.zq.system.modules.system.entity.Pfuser;
import com.zq.system.modules.system.repository.DeptRepository;
import com.zq.system.modules.system.repository.JobRepository;
import com.zq.system.modules.system.repository.RoleRepository;
import com.zq.system.modules.system.repository.UserRepository;
import com.zq.system.modules.system.service.OnlineUserService;
import com.zq.system.modules.system.service.UserCacheClean;
import com.zq.system.modules.system.service.UserService;
import com.zq.system.modules.system.service.dto.JobSmallDto;
import com.zq.system.modules.system.service.dto.RoleSmallDto;
import com.zq.system.modules.system.service.dto.UserDto;
import com.zq.system.modules.system.service.dto.UserQueryCriteria;
import com.zq.system.modules.system.service.mapstruct.UserMapper;
import com.zq.system.utils.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotBlank;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author Zheng Jie
* @date 2018-11-23
*/
@Slf4j
@Service
@RequiredArgsConstructor
@CacheConfig(cacheNames = "user")
public class UserServiceImpl implements UserService {
private final UserRepository userRepository;
private final UserMapper userMapper;
private final FileProperties properties;
private final RedisUtils redisUtils;
private final UserCacheClean userCacheClean;
private final OnlineUserService onlineUserService;
private final PfuserDao pfuserDao;
private final PasswordEncoder passwordEncoder;
private final DeptRepository deptRepository;
private final RoleRepository roleRepository;
private final JobRepository jobRepository;
@Override
public Object queryAll(UserQueryCriteria criteria, Pageable pageable) {
Page<User> page = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable);
return PageUtil.toPage(page.map(userMapper::toDto));
}
@Override
public List<UserDto> queryAll(UserQueryCriteria criteria) {
List<User> users = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder));
return userMapper.toDto(users);
}
@Override
@Cacheable(key = "'id:' + #p0")
@Transactional(rollbackFor = Exception.class)
public UserDto findById(long id) {
User user = userRepository.findById(id).orElseGet(User::new);
ValidationUtil.isNull(user.getId(), "User", "id", id);
return userMapper.toDto(user);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(User resources) {
if (userRepository.findByUsername(resources.getUsername()) != null) {
throw new EntityExistException(User.class, "username", resources.getUsername());
}
if (StringUtils.isNotBlank(resources.getEmail()) && userRepository.findByEmail(resources.getEmail()) != null) {
throw new EntityExistException(User.class, "email", resources.getEmail());
}
if (userRepository.findByPhone(resources.getPhone()) != null) {
throw new EntityExistException(User.class, "phone", resources.getPhone());
}
userRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(User resources) throws Exception {
User user = userRepository.findById(resources.getId()).orElseGet(User::new);
ValidationUtil.isNull(user.getId(), "User", "id", resources.getId());
User user1 = userRepository.findByUsername(resources.getUsername());
User user2 = userRepository.findByEmail(resources.getEmail());
User user3 = userRepository.findByPhone(resources.getPhone());
if (user1 != null && !user.getId().equals(user1.getId())) {
throw new EntityExistException(User.class, "username", resources.getUsername());
}
if (user2 != null && !user.getId().equals(user2.getId())) {
throw new EntityExistException(User.class, "email", resources.getEmail());
}
if (user3 != null && !user.getId().equals(user3.getId())) {
throw new EntityExistException(User.class, "phone", resources.getPhone());
}
// 如果用户的角色改变
if (!resources.getRoles().equals(user.getRoles())) {
redisUtils.del(CacheKey.DATA_USER + resources.getId());
redisUtils.del(CacheKey.MENU_USER + resources.getId());
redisUtils.del(CacheKey.ROLE_AUTH + resources.getId());
}
// 如果用户被禁用,则清除用户登录信息
if (!resources.getEnabled()) {
onlineUserService.kickOutForUsername(resources.getUsername());
}
user.setUsername(resources.getUsername());
user.setEmail(resources.getEmail());
user.setEnabled(resources.getEnabled());
user.setRoles(resources.getRoles());
user.setDept(resources.getDept());
user.setJobs(resources.getJobs());
user.setPhone(resources.getPhone());
user.setNickName(resources.getNickName());
user.setGender(resources.getGender());
userRepository.save(user);
// 清除缓存
delCaches(user.getId(), user.getUsername());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateCenter(User resources) {
User user = userRepository.findById(resources.getId()).orElseGet(User::new);
User user1 = userRepository.findByPhone(resources.getPhone());
if (user1 != null && !user.getId().equals(user1.getId())) {
throw new EntityExistException(User.class, "phone", resources.getPhone());
}
user.setNickName(resources.getNickName());
user.setPhone(resources.getPhone());
user.setGender(resources.getGender());
userRepository.save(user);
// 清理缓存
delCaches(user.getId(), user.getUsername());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Set<Long> ids) {
for (Long id : ids) {
// 清理缓存
UserDto user = findById(id);
delCaches(user.getId(), user.getUsername());
}
userRepository.deleteAllByIdIn(ids);
}
@Override
public UserDto findByName(String userName) {
User user = userRepository.findByUsername(userName);
if (user == null) {
throw new EntityNotFoundException(User.class, "name", userName);
} else {
return userMapper.toDto(user);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updatePass(String username, String pass) {
userRepository.updatePass(username, pass, new Date());
flushCache(username);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Map<String, String> updateAvatar(MultipartFile multipartFile) {
User user = userRepository.findByUsername(SecurityUtils.getCurrentUsername());
String oldPath = user.getAvatarPath();
String imaUrl = UploadUtils.saveImg(multipartFile, SystemName.SYS);
user.setAvatarPath(imaUrl);
user.setAvatarName(imaUrl);
userRepository.save(user);
if (StringUtils.isNotBlank(oldPath)) {
FileUtil.del(oldPath);
}
@NotBlank String username = user.getUsername();
flushCache(username);
return new HashMap<String, String>(1) {{
put("avatar", imaUrl);
}};
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateEmail(String username, String email) {
userRepository.updateEmail(username, email);
flushCache(username);
}
@Override
public void download(List<UserDto> queryAll, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (UserDto userDTO : queryAll) {
List<String> roles = userDTO.getRoles().stream().map(RoleSmallDto::getName).collect(Collectors.toList());
Map<String, Object> map = new LinkedHashMap<>();
map.put("用户名", userDTO.getUsername());
map.put("角色", roles);
map.put("部门", userDTO.getDept().getName());
map.put("岗位", userDTO.getJobs().stream().map(JobSmallDto::getName).collect(Collectors.toList()));
map.put("邮箱", userDTO.getEmail());
map.put("状态", userDTO.getEnabled() ? "启用" : "禁用");
map.put("手机号码", userDTO.getPhone());
map.put("修改密码的时间", userDTO.getPwdResetTime());
map.put("创建日期", userDTO.getCreateTime());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
/**
* 清理缓存
*
* @param id /
*/
public void delCaches(Long id, String username) {
redisUtils.del(CacheKey.USER_ID + id);
flushCache(username);
}
/**
* 清理 登陆时 用户缓存信息
*
* @param username /
*/
private void flushCache(String username) {
userCacheClean.cleanUserCache(username);
}
@Override
public void sendCode(String phone) {
User user = userRepository.findByUsername(phone);
if (user == null) {
Pfuser pfuser = pfuserDao.selectOne(Wrappers.lambdaQuery(Pfuser.builder().phone(phone).build()));
AssertUtils.notNull(pfuser, "手机号不存在");
}
String code = RandomUtil.randomNumbers(6);
String content = "您的验证码为:" + code + "(5分钟内有效)。为了保障信息安全,如非本人操作请忽略本短信。";
boolean sendMsg = MobileSmsUtils.sendMsg(phone, content);
log.info(">> phone: {}, sendCode: {}, success: {}", phone, code, sendMsg);
redisUtils.setStr(CacheKeys.authCodeKey(phone), code, 5);
}
@Override
public void resetPassword(LoginVo vo) {
verificationCode(vo.getPhone(), vo.getVerifyCode());
User user = userRepository.findByUsername(vo.getPhone());
if (user == null) {
user = addUser(vo.getPhone());
}
AssertUtils.notNull(user, "手机号不存在");
updatePass(user.getUsername(), passwordEncoder.encode(vo.getPasswd()));
}
/**
* 保存用户
*
* @param phone
* @return
*/
private User addUser(String phone) {
Pfuser pfuser = pfuserDao.selectOne(Wrappers.lambdaQuery(Pfuser.builder().phone(phone).build()));
if (pfuser == null) {
return null;
}
User user = userRepository.findByUsername(phone);
if (user == null) {
user = new User();
List<Role> roleList = roleRepository.findAllById(Collections.singletonList(2L));
user.setRoles(new HashSet<>(roleList));
List<Job> jobList = jobRepository.findAllById(Collections.singletonList(13L));
user.setJobs(new HashSet<>(jobList));
deptRepository.findById(8L).ifPresent(user::setDept);
user.setUsername(phone);
user.setNickName(pfuser.getUsername());
user.setGender(pfuser.getSex() == null ? "未知" : pfuser.getSex() == 0 ? "男" : "女");
user.setPhone(phone);
user.setEmail(pfuser.getSourcemail());
user.setPassword(passwordEncoder.encode("gxmz!23"));
user.setIsAdmin(false);
user.setEnabled(true);
user.setCreateBy("admin");
user.setUpdatedBy("admin");
user.setCreateTime(DateUtil.date().toTimestamp());
user.setUpdateTime(DateUtil.date().toTimestamp());
create(user);
}
return user;
}
/**
* 判断验证码
*
* @param phone
* @param code
*/
public void verificationCode(String phone, String code) {
String cacheCode = redisUtils.getStr(CacheKeys.authCodeKey(phone));
AssertUtils.isTrue(org.apache.commons.lang3.StringUtils.isNotBlank(cacheCode) && cacheCode.equalsIgnoreCase(code), "验证码错误");
redisUtils.deleteStr(CacheKeys.authCodeKey(phone));
}
@Override
public void modifyPasswd(LoginVo vo) {
verificationCode(vo.getPhone(), vo.getVerifyCode());
User user = userRepository.findByUsername(vo.getPhone());
AssertUtils.notNull(user, "手机号不存在");
updatePass(user.getUsername(), passwordEncoder.encode(vo.getPasswd()));
}
@Override
public ApiTokenVo phoneLogin(LoginVo vo) {
User user = userRepository.findByUsername(vo.getPhone());
if (user == null) {
user = addUser(vo.getPhone());
}
AssertUtils.notNull(user, "手机号不存在");
verificationCode(vo.getPhone(), vo.getVerifyCode());
AssertUtils.isTrue(user.getEnabled(), "账号已禁用");
return getApiToken(user);
}
/**
* 获取ApiToken
*
* @param user
* @return
*/
private ApiTokenVo getApiToken(User user) {
ApiTokenVo tokenVo = ApiTokenVo.builder()
.userId(user.getId())
.phone(user.getPhone())
.username(user.getUsername())
.name(user.getNickName())
.nickname(user.getNickName())
.sex(user.getGender())
.avatar(user.getAvatarPath())
.build();
String token = ApiTokenUtils.createToken(tokenVo, CacheKeys.APP_TOKEN_EXPIRE_MINUTES);
tokenVo.setToken(token);
// 重新登录删除前一个token实现单机登录
String cacheToken = redisUtils.getStr(CacheKeys.liveAppTokenKey(user.getId().toString()));
redisUtils.deleteObj(CacheKeys.appTokenKey(cacheToken));
redisUtils.deleteStr(CacheKeys.liveAppTokenKey(user.getId().toString()));
// 缓存登录用户
redisUtils.setObj(CacheKeys.appTokenKey(token), tokenVo, CacheKeys.APP_TOKEN_EXPIRE_MINUTES);
// 用户ID作为key保存token, 再次登录可以找出该用户的token
redisUtils.setStr(CacheKeys.liveAppTokenKey(user.getId().toString()), token, CacheKeys.APP_TOKEN_EXPIRE_MINUTES);
return tokenVo;
}
@Override
public ApiTokenVo passwdLogin(LoginVo vo) {
User user = userRepository.findByUsername(vo.getPhone());
AssertUtils.notNull(user, "手机号不存在");
AssertUtils.hasText(user.getPassword(), "未设置密码");
AssertUtils.isTrue(passwordEncoder.matches(vo.getPasswd(), user.getPassword()), "密码错误");
AssertUtils.isTrue(user.getEnabled(), "账号已禁用");
return getApiToken(user);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment