Commit a7a3715a authored by 王俊权's avatar 王俊权

Merge remote-tracking branch 'origin/v1' into v1

parents 74fd0a67 2120c03f
...@@ -37,24 +37,24 @@ public class ChannelConfController { ...@@ -37,24 +37,24 @@ public class ChannelConfController {
* @return * @return
*/ */
@Security(authorityId = "Channel.getChannelList") @Security(authorityId = "Channel.getChannelList")
@ChannelIdInit @ChannelIdInit(channelIdSPEL = "#this[0]")
@PostMapping("/info") @PostMapping("/info")
public Result channelList(Long channelId, Integer pageNumber, Integer pageSize) { public Result channelList(Long channelId, String channelName, Integer pageNumber, Integer pageSize) {
if (pageNumber == null || pageSize == null) { if (pageNumber == null || pageSize == null) {
return Result.buildFial("page信息不对"); return Result.buildFial("page信息不对");
} }
return Result.buildSuccess(channelConfService.getChannelInfo(pageNumber, pageSize, channelId)); return Result.buildSuccess(channelConfService.getChannelInfo(pageNumber, pageSize, channelId, channelName));
} }
/** /**
* 查询单个渠道配置 * 查询单个渠道配置
* 去过是渠道用户,只能查自己,查询条件置灰 * 如果是渠道用户,只能查自己,查询条件置灰
* @param channelId * @param channelId
* @return * @return
*/ */
@Security(authorityId = "Channel.getChannelConfInfo") @Security(authorityId = "Channel.getChannelConfInfo")
@ChannelIdInit @ChannelIdInit(channelIdSPEL = "#this[0]")
@CheckChannelRole @CheckChannelRole(channelIdSPEL = "#this[0]")
@GetMapping("/cfg/info") @GetMapping("/cfg/info")
public Result getChannelConfInfo(Long channelId) { public Result getChannelConfInfo(Long channelId) {
return Result.buildSuccess(channelConfService.getChannelConf(channelId), "success"); return Result.buildSuccess(channelConfService.getChannelConf(channelId), "success");
...@@ -67,11 +67,13 @@ public class ChannelConfController { ...@@ -67,11 +67,13 @@ public class ChannelConfController {
* @return * @return
*/ */
@Security(authorityId = "Channel.editChannelConfInfo") @Security(authorityId = "Channel.editChannelConfInfo")
@CheckChannelRole(isObjParam = true, paramClazz = ChannelConfVo.class) @CheckChannelRole(channelIdSPEL = "#this[0].basicInfo.channelId")
@PostMapping("/cfg/info") @PostMapping("/cfg/info")
public Result editChannelConfInfo(@RequestBody @Valid ChannelConfVo channelConfVo) { public Result editChannelConfInfo(@RequestBody @Valid ChannelConfVo channelConfVo) {
Boolean aBoolean = channelConfService.editChannelConfInfo(channelConfVo); Boolean aBoolean = channelConfService.editChannelConfInfo(channelConfVo);
// TODO 检查渠道
if (aBoolean) { if (aBoolean) {
// 属性ka缓存 // 属性ka缓存
clfCenterService.reloadKAConfiguration(); clfCenterService.reloadKAConfiguration();
......
...@@ -12,7 +12,7 @@ import org.springframework.data.domain.Page; ...@@ -12,7 +12,7 @@ import org.springframework.data.domain.Page;
*/ */
public interface ChannelConfService { public interface ChannelConfService {
Page<ChannelListModel> getChannelInfo(Integer pageNumber, Integer pageSize, Long channelId); Page<ChannelListModel> getChannelInfo(Integer pageNumber, Integer pageSize, Long channelId, String channelName);
ChannelConfVo getChannelConf(Long channelId); ChannelConfVo getChannelConf(Long channelId);
......
...@@ -39,9 +39,9 @@ public class ChannelConfServiceImpl implements ChannelConfService{ ...@@ -39,9 +39,9 @@ public class ChannelConfServiceImpl implements ChannelConfService{
@Override @Override
public Page<ChannelListModel> getChannelInfo(Integer pageNumber, Integer pageSize, Long channelId) { public Page<ChannelListModel> getChannelInfo(Integer pageNumber, Integer pageSize, Long channelId, String channelName) {
Page<ClfChannelConfiguration> page = clfCenterService.findChannelConfigurationByCriteriaQueryPage(pageNumber, pageSize, channelId); Page<ClfChannelConfiguration> page = clfCenterService.findChannelConfigurationByCriteriaQueryPage(pageNumber, pageSize, channelId, channelName);
Page<ChannelListModel> channelListModelPage = page.map(it -> { Page<ChannelListModel> channelListModelPage = page.map(it -> {
ChannelListModel channelListModel = new ChannelListModel(); ChannelListModel channelListModel = new ChannelListModel();
......
...@@ -3,6 +3,7 @@ package cn.quantgroup.cashloanflowboss.api.optlog.controller; ...@@ -3,6 +3,7 @@ package cn.quantgroup.cashloanflowboss.api.optlog.controller;
import cn.quantgroup.cashloanflowboss.api.optlog.entity.OptHistoryLog; import cn.quantgroup.cashloanflowboss.api.optlog.entity.OptHistoryLog;
import cn.quantgroup.cashloanflowboss.api.optlog.service.OptHistoryLogService; import cn.quantgroup.cashloanflowboss.api.optlog.service.OptHistoryLogService;
import cn.quantgroup.cashloanflowboss.api.order.model.OrderBaseModel; import cn.quantgroup.cashloanflowboss.api.order.model.OrderBaseModel;
import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.CheckChannelRole;
import cn.quantgroup.cashloanflowboss.core.base.Result; import cn.quantgroup.cashloanflowboss.core.base.Result;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -24,6 +25,7 @@ public class OperateController { ...@@ -24,6 +25,7 @@ public class OperateController {
private OptHistoryLogService optHistoryLogService; private OptHistoryLogService optHistoryLogService;
@CheckChannelRole(channelOrderNumberSPEL = "#this[0].channelOrderNumber")
@GetMapping("/history/log/all") @GetMapping("/history/log/all")
public Result findAllOptHistoryLog(OrderBaseModel orderBaseModel) { public Result findAllOptHistoryLog(OrderBaseModel orderBaseModel) {
final List<OptHistoryLog> allOptHistoryLog = optHistoryLogService.getAllOptHistoryLog(orderBaseModel); final List<OptHistoryLog> allOptHistoryLog = optHistoryLogService.getAllOptHistoryLog(orderBaseModel);
......
...@@ -6,10 +6,8 @@ import cn.quantgroup.cashloanflowboss.component.security.annotiation.Security; ...@@ -6,10 +6,8 @@ import cn.quantgroup.cashloanflowboss.component.security.annotiation.Security;
import cn.quantgroup.cashloanflowboss.core.Application; import cn.quantgroup.cashloanflowboss.core.Application;
import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.ChannelIdInit; import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.ChannelIdInit;
import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.CheckChannelRole; import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.CheckChannelRole;
import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.CheckChannelRoleByChannelOrderNumber;
import cn.quantgroup.cashloanflowboss.core.base.Result; import cn.quantgroup.cashloanflowboss.core.base.Result;
import cn.quantgroup.cashloanflowboss.core.base.Tuple; import cn.quantgroup.cashloanflowboss.core.base.Tuple;
import cn.quantgroup.cashloanflowboss.core.tuple.ThreeTuple;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -32,8 +30,10 @@ public class OrderController { ...@@ -32,8 +30,10 @@ public class OrderController {
/** /**
*
* 订单查询列表接口 * 订单查询列表接口
* *
* 渠道用户只能查自己渠道订单 如果是别的渠道订单 不能查询(如果channelId 赋值 channelOrderNumber 是别的渠道订单 应该查询不到数据,所以不需要CheckChannelRole)
* @param channelId * @param channelId
* @param channelOrderNumber * @param channelOrderNumber
* @param pageNumber * @param pageNumber
...@@ -41,8 +41,7 @@ public class OrderController { ...@@ -41,8 +41,7 @@ public class OrderController {
* @return 返回中包含当前订单可操作的 button * @return 返回中包含当前订单可操作的 button
*/ */
@Security(authorityId = "Order.getOrderList") @Security(authorityId = "Order.getOrderList")
@ChannelIdInit @ChannelIdInit(channelIdSPEL = "#this[0]")
@CheckChannelRole
@GetMapping("/list") @GetMapping("/list")
public Result orderList(Long channelId, String channelOrderNumber, String applyNo, Long loanId, Integer pageNumber, Integer pageSize) { public Result orderList(Long channelId, String channelOrderNumber, String applyNo, Long loanId, Integer pageNumber, Integer pageSize) {
if (pageNumber == null || pageSize == null) { if (pageNumber == null || pageSize == null) {
...@@ -55,22 +54,19 @@ public class OrderController { ...@@ -55,22 +54,19 @@ public class OrderController {
/** /**
* 审批接口 * 审批接口
* *
* 渠道只能审批自己渠道的订单
* @param approveVo * @param approveVo
* @return * @return
*/ */
@Security(authorityId = "Order.approveOpt") @Security(authorityId = "Order.approveOpt")
@ChannelIdInit @CheckChannelRole(channelOrderNumberSPEL = "#this[0].channelOrderNumber")
@PostMapping("/approve") @PostMapping("/approve")
public Result approveOpt(@RequestBody @Valid ApproveVo approveVo) { public Result approveOpt(@RequestBody @Valid ApproveVo approveVo) {
if (Application.isDebug()) { if (Application.isDebug()) {
Tuple<Boolean, String> approveOptBooleanAndFundSettingBooleanTuple = orderService.approveOpt(approveVo); Tuple<Boolean, String> approveOptBooleanAndFundSettingBooleanTuple = orderService.approveOpt(approveVo);
Boolean approveResult = approveOptBooleanAndFundSettingBooleanTuple.getKey(); Boolean approveResult = approveOptBooleanAndFundSettingBooleanTuple.getKey();
if (approveResult) { return Result.buildSuccess(approveResult, approveOptBooleanAndFundSettingBooleanTuple.getValue());
return Result.buildSuccess(approveResult, approveOptBooleanAndFundSettingBooleanTuple.getValue());
} else {
return Result.buildSuccess(false,"审批操作失败");
}
} else { } else {
return Result.buildSuccess(false,"无此操作"); return Result.buildSuccess(false,"无此操作");
} }
...@@ -82,11 +78,12 @@ public class OrderController { ...@@ -82,11 +78,12 @@ public class OrderController {
* @return * @return
*/ */
@Security(authorityId = "Order.lending") @Security(authorityId = "Order.lending")
@CheckChannelRole(channelOrderNumberSPEL = "#this[0].channelOrderNumber")
@PostMapping("/lending") @PostMapping("/lending")
public Result<Boolean> lending(@RequestBody @Valid LendingFormModel lendingFormModel) { public Result<Boolean> lending(@RequestBody @Valid LendingFormModel lendingFormModel) {
if (Application.isDebug()) { if (Application.isDebug()) {
Tuple<Boolean, String> lendingResult = this.orderService.lending(lendingFormModel); Tuple<Boolean, String> lending = this.orderService.lending(lendingFormModel);
return Result.buildSuccess(lendingResult.getKey(), lendingResult.getKey() ? "放款操作成功" : "放款操作失败"); return Result.buildSuccess(lending.getKey(), lending.getValue());
} else { } else {
return Result.buildSuccess(false,"无此操作"); return Result.buildSuccess(false,"无此操作");
} }
...@@ -98,6 +95,7 @@ public class OrderController { ...@@ -98,6 +95,7 @@ public class OrderController {
* @return * @return
*/ */
@Security(authorityId = "Order.secondAudit") @Security(authorityId = "Order.secondAudit")
@CheckChannelRole(channelOrderNumberSPEL = "#this[0]")
@GetMapping("/secondAudit") @GetMapping("/secondAudit")
public Result<Boolean> secondAudit(String channelOrderNumber) { public Result<Boolean> secondAudit(String channelOrderNumber) {
if (Application.isDebug()) { if (Application.isDebug()) {
...@@ -134,6 +132,7 @@ public class OrderController { ...@@ -134,6 +132,7 @@ public class OrderController {
* @return * @return
*/ */
@Security(authorityId = "Order.cancelPreLoan") @Security(authorityId = "Order.cancelPreLoan")
@CheckChannelRole(channelOrderNumberSPEL = "#this[0]")
@PostMapping("/cancel/loan") @PostMapping("/cancel/loan")
public Result<Boolean> cancelPreLoan(@RequestParam @Valid String channelOrderNumber) { public Result<Boolean> cancelPreLoan(@RequestParam @Valid String channelOrderNumber) {
if (Application.isDebug()) { if (Application.isDebug()) {
...@@ -150,6 +149,7 @@ public class OrderController { ...@@ -150,6 +149,7 @@ public class OrderController {
* @return * @return
*/ */
@Security(authorityId = "Order.cancelAfterLoan") @Security(authorityId = "Order.cancelAfterLoan")
@CheckChannelRole(channelOrderNumberSPEL = "#this[0]")
@PostMapping("/cancel/after/loan") @PostMapping("/cancel/after/loan")
public Result<Boolean> cancelAfterLoan(@RequestParam @Valid String channelOrderNumber) { public Result<Boolean> cancelAfterLoan(@RequestParam @Valid String channelOrderNumber) {
if (Application.isDebug()) { if (Application.isDebug()) {
...@@ -167,8 +167,7 @@ public class OrderController { ...@@ -167,8 +167,7 @@ public class OrderController {
* @return * @return
*/ */
@Security(authorityId = "Order.getOrderHistoryStatus") @Security(authorityId = "Order.getOrderHistoryStatus")
@ChannelIdInit @CheckChannelRole(channelOrderNumberSPEL = "#this[0]")
@CheckChannelRoleByChannelOrderNumber
@GetMapping("/history/status") @GetMapping("/history/status")
public Result getOrderHistoryStatus(String channelOrderNumber) { public Result getOrderHistoryStatus(String channelOrderNumber) {
return Result.buildSuccess(orderService.getOrderHistoryStatus(channelOrderNumber)); return Result.buildSuccess(orderService.getOrderHistoryStatus(channelOrderNumber));
...@@ -181,8 +180,7 @@ public class OrderController { ...@@ -181,8 +180,7 @@ public class OrderController {
* @return * @return
*/ */
@Security(authorityId = "Order.orderCallbackRecordList") @Security(authorityId = "Order.orderCallbackRecordList")
@ChannelIdInit @CheckChannelRole(channelOrderNumberSPEL = "#this[0]")
@CheckChannelRoleByChannelOrderNumber
@GetMapping("/orderCallbackRecordList") @GetMapping("/orderCallbackRecordList")
public Result orderCallbackRecordList(String channelOrderNumber) { public Result orderCallbackRecordList(String channelOrderNumber) {
return Result.buildSuccess(orderService.getOrderCallbackRecordList(channelOrderNumber)); return Result.buildSuccess(orderService.getOrderCallbackRecordList(channelOrderNumber));
...@@ -196,8 +194,7 @@ public class OrderController { ...@@ -196,8 +194,7 @@ public class OrderController {
* @return * @return
*/ */
@Security(authorityId = "Order.repaymentPlan") @Security(authorityId = "Order.repaymentPlan")
@ChannelIdInit @CheckChannelRole(channelOrderNumberSPEL = "#this[0]")
@CheckChannelRoleByChannelOrderNumber
@GetMapping("/repaymentPlan") @GetMapping("/repaymentPlan")
public Result repaymentPlan(String channelOrderNumber, Long loanId) { public Result repaymentPlan(String channelOrderNumber, Long loanId) {
return Result.buildSuccess(orderService.findRepaymentPlan(channelOrderNumber, loanId)); return Result.buildSuccess(orderService.findRepaymentPlan(channelOrderNumber, loanId));
......
...@@ -15,4 +15,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; ...@@ -15,4 +15,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Target({METHOD}) @Target({METHOD})
@Retention(RUNTIME) @Retention(RUNTIME)
public @interface ChannelIdInit { public @interface ChannelIdInit {
String channelIdSPEL() default "";
} }
...@@ -15,6 +15,6 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; ...@@ -15,6 +15,6 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Target({METHOD}) @Target({METHOD})
@Retention(RUNTIME) @Retention(RUNTIME)
public @interface CheckChannelRole { public @interface CheckChannelRole {
boolean isObjParam() default false; String channelIdSPEL() default "";
Class paramClazz() default Object.class; String channelOrderNumberSPEL() default "";
} }
package cn.quantgroup.cashloanflowboss.core.annotation.channelrole;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* function:
* date: 2019/8/6
*
* @author: suntao
*/
@Target({METHOD})
@Retention(RUNTIME)
public @interface CheckChannelRoleByChannelOrderNumber {
}
package cn.quantgroup.cashloanflowboss.core.aspect; package cn.quantgroup.cashloanflowboss.core.aspect;
import cn.quantgroup.cashloanflowboss.api.channel.model.ChannelConfVo;
import cn.quantgroup.cashloanflowboss.api.channel.util.ChannelConfUtil;
import cn.quantgroup.cashloanflowboss.api.login.model.Principal; import cn.quantgroup.cashloanflowboss.api.login.model.Principal;
import cn.quantgroup.cashloanflowboss.core.Application; import cn.quantgroup.cashloanflowboss.core.Application;
import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.ChannelIdInit;
import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.CheckChannelRole; import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.CheckChannelRole;
import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.CheckChannelRoleByChannelOrderNumber;
import cn.quantgroup.cashloanflowboss.core.base.Result; import cn.quantgroup.cashloanflowboss.core.base.Result;
import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus; import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderMapping; import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderMapping;
...@@ -18,11 +14,12 @@ import org.aspectj.lang.ProceedingJoinPoint; ...@@ -18,11 +14,12 @@ import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.CodeSignature;
import org.aspectj.lang.reflect.MethodSignature; import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionException;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.lang.reflect.Method; import java.lang.reflect.Method;
...@@ -36,24 +33,24 @@ import java.lang.reflect.Method; ...@@ -36,24 +33,24 @@ import java.lang.reflect.Method;
@Slf4j @Slf4j
@Component @Component
@Aspect @Aspect
@Order(Ordered.LOWEST_PRECEDENCE) @Order(2)
public class RoleLoadAspect { public class ChannelRoleCheckAspect {
@Pointcut("execution(* cn.quantgroup.cashloanflowboss.api.channel.controller.*.*(..))")
private void channelController() {}
@Pointcut("execution(* cn.quantgroup.cashloanflowboss.api.order.controller.*.*(..))") @Pointcut("@annotation(cn.quantgroup.cashloanflowboss.core.annotation.channelrole.CheckChannelRole)")
private void orderController() {} private void checkRole() {}
@Pointcut("channelController() || orderController() ")
private void doSomeRole() {}
@Autowired @Autowired
private ClfOrderMappingRepository clfOrderMappingRepository; private ClfOrderMappingRepository clfOrderMappingRepository;
@Around(value = "doSomeRole()") /**
public Object around(ProceedingJoinPoint pjp) { * 通过 channelId 或者 channelOrderNumber 判断 如果是渠道用户登陆 是否当前渠道
* @param pjp
*/
@Around(value = "checkRole()")
public Object checkRoleBefore(ProceedingJoinPoint pjp) {
Object[] args = pjp.getArgs(); Object[] args = pjp.getArgs();
MethodSignature methodSignature = (MethodSignature) pjp.getSignature(); MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
Method method = methodSignature.getMethod(); Method method = methodSignature.getMethod();
...@@ -61,7 +58,6 @@ public class RoleLoadAspect { ...@@ -61,7 +58,6 @@ public class RoleLoadAspect {
Principal principal = Application.getPrincipal(); Principal principal = Application.getPrincipal();
if (principal == null) { if (principal == null) {
try { try {
// 没有登录 登录检查控制
return pjp.proceed(args); return pjp.proceed(args);
} catch (Throwable throwable) { } catch (Throwable throwable) {
log.error("请求失败,e={}", ExceptionUtils.getStackTrace(throwable)); log.error("请求失败,e={}", ExceptionUtils.getStackTrace(throwable));
...@@ -69,83 +65,62 @@ public class RoleLoadAspect { ...@@ -69,83 +65,62 @@ public class RoleLoadAspect {
} }
} }
// 如果是渠道用户登陆 默认加载channelId // 如果是渠道用户登陆,参数中channelId 不是登陆用户channelId,返回 拒绝请求
ChannelIdInit annotation = method.getAnnotation(ChannelIdInit.class); CheckChannelRole checkChannelRoleAnno = method.getAnnotation(CheckChannelRole.class);
if (annotation != null && principal.isChannel()) {
String[] paramNames = ((CodeSignature) pjp.getSignature()).getParameterNames(); if (checkChannelRoleAnno != null) {
for (int i = 0; i < paramNames.length; i++) { String channelIdSPEL = checkChannelRoleAnno.channelIdSPEL();
if (ChannelConfUtil.channelIdParamName.equals(paramNames[i])) { String channelOrderNumberSPEL = checkChannelRoleAnno.channelOrderNumberSPEL();
args[i] = principal.getChannelId();
} if (StringUtils.isAllEmpty(channelIdSPEL, channelOrderNumberSPEL)) {
log.error("[CheckChannelRole]channelIdSPEL, channelOrderNumberSPEL 不能都为空");
return Result.buildFial(ApplicationStatus.ARGUMENT_VALID_EXCEPTION);
} }
}
// 如果是渠道用户登陆,参数中channelId 不是登陆用户channelId,返回 拒绝请求 if (principal.isChannel()) {
CheckChannelRole checkChannelRole = method.getAnnotation(CheckChannelRole.class); if (StringUtils.isNotEmpty(channelIdSPEL)) {
if (checkChannelRole != null && principal.isChannel()) { // 通过channelId 判断
Long requestChannelId = -1L; try {
if (!checkChannelRole.isObjParam()) { if (channelIdSPEL.startsWith("#this")) {
String[] paramNames = ((CodeSignature) pjp.getSignature()).getParameterNames(); Expression expression = new SpelExpressionParser().parseExpression(channelIdSPEL);
for (int i = 0; i < paramNames.length; i++) {
// 是简单类型,多个参数 直接参数channelId if (!Application.getPrincipal().getChannelId().equals(expression.getValue(args, Long.class))) {
if (ChannelConfUtil.channelIdParamName.equals(paramNames[i])) { log.info("[CheckChannelRole]渠道用户,登陆channelId与查询channelId不是同一个");
// 找到channelId是第几个参数 i return Result.buildFial(ApplicationStatus.INVALID_AUTHORITY);
Object requestChannelIdObj = args[i]; }
if (requestChannelIdObj == null) { } else {
log.info("[CheckChannelRole]无channelId数据"); log.warn("[CheckChannelRole]channelIdSPEL取值失败");
return Result.buildFial(ApplicationStatus.ARGUMENT_VALID_EXCEPTION); }
} catch (ExpressionException e) {
log.error("[CheckChannelRole]key表达式“" + channelIdSPEL + "”错误:{}", e);
throw e;
}
} else if (StringUtils.isNotEmpty(channelOrderNumberSPEL)){
// 通过channelOrderNumber 判断
String channelOrderNumber = "";
if (channelOrderNumberSPEL.startsWith("#this")) {
Expression expression = new SpelExpressionParser().parseExpression(channelOrderNumberSPEL);
channelOrderNumber = expression.getValue(args, String.class);
} else {
log.warn("[CheckChannelRole]channelOrderNumberSPEL取值失败");
}
if (StringUtils.isNotEmpty(channelOrderNumber)) {
ClfOrderMapping clfOrderMapping = clfOrderMappingRepository.findByChannelOrderNoLastOne(channelOrderNumber);
if (clfOrderMapping == null) {
log.info("[CheckChannelRoleByChannelOrderNumber]无channelOrderNumber数据,channelOrderNumber={}",channelOrderNumber);
return Result.buildFial(ApplicationStatus.ARGUMENT_VALID_EXCEPTION, "未找到该订单");
} }
requestChannelId = Long.valueOf(String.valueOf(requestChannelIdObj)); if (!clfOrderMapping.getRegisteredFrom().equals(principal.getChannelId())) {
if (!principal.isSameChannel(requestChannelId)) { log.info("[CheckChannelRoleByChannelOrderNumber]不是该渠道的订单,channelOrderNumber={}",channelOrderNumber);
log.info("[CheckChannelRole]渠道用户,登陆channelId与查询channelId不是同一个");
return Result.buildFial(ApplicationStatus.INVALID_AUTHORITY); return Result.buildFial(ApplicationStatus.INVALID_AUTHORITY);
} }
} }
} }
} else {
Class paramClazz = checkChannelRole.paramClazz();
if (paramClazz == ChannelConfVo.class) {
ChannelConfVo confVo = (ChannelConfVo) args[0];
final Long channelIdTemp = confVo.getBasicInfo().getChannelId();
if (channelIdTemp == null) {
log.info("[CheckChannelRole]无channelId数据");
return Result.buildFial(ApplicationStatus.ARGUMENT_VALID_EXCEPTION);
}
requestChannelId = channelIdTemp;
}
}
if (!principal.isSameChannel(requestChannelId)) {
log.info("[CheckChannelRole]渠道用户,登陆channelId与查询channelId不是同一个");
return Result.buildFial(ApplicationStatus.INVALID_AUTHORITY);
}
}
// ======================================== CheckChannelRole end ==========================================
// 如果是渠道用户登陆,参数中channelOrderNumber 不是登陆用户channelOrderNumber,返回 拒绝请求
CheckChannelRoleByChannelOrderNumber checkChannelRoleByChannelOrderNumber = method.getAnnotation(CheckChannelRoleByChannelOrderNumber.class);
if (checkChannelRoleByChannelOrderNumber != null && principal.isChannel()) {
String[] paramNames = ((CodeSignature) pjp.getSignature()).getParameterNames();
String channelOrderNumber = "";
for (int i = 0; i < paramNames.length; i++) {
if ("channelOrderNumber".equals(paramNames[i])) {
channelOrderNumber = String.valueOf(args[i]);
}
}
if (StringUtils.isEmpty(channelOrderNumber)) {
log.info("[CheckChannelRoleByChannelOrderNumber]参数channelOrderNumber不能为空");
return Result.buildFial(ApplicationStatus.ARGUMENT_VALID_EXCEPTION);
}
ClfOrderMapping clfOrderMapping = clfOrderMappingRepository.findByChannelOrderNoLastOne(channelOrderNumber);
if (clfOrderMapping == null) {
log.info("[CheckChannelRoleByChannelOrderNumber]无channelOrderNumber数据,channelOrderNumber={}",channelOrderNumber);
return Result.buildFial(ApplicationStatus.ARGUMENT_VALID_EXCEPTION, "未找到该订单");
}
if (!clfOrderMapping.getRegisteredFrom().equals(principal.getChannelId())) {
log.info("[CheckChannelRoleByChannelOrderNumber]不是该渠道的订单,channelOrderNumber={}",channelOrderNumber);
return Result.buildFial(ApplicationStatus.INVALID_AUTHORITY);
} }
} }
// ======================================== CheckChannelRoleByChannelOrderNumber end ==========================================
try { try {
return pjp.proceed(args); return pjp.proceed(args);
......
package cn.quantgroup.cashloanflowboss.core.aspect;
import cn.quantgroup.cashloanflowboss.api.channel.util.ChannelConfUtil;
import cn.quantgroup.cashloanflowboss.api.login.model.Principal;
import cn.quantgroup.cashloanflowboss.core.Application;
import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.ChannelIdInit;
import cn.quantgroup.cashloanflowboss.core.base.Result;
import cn.quantgroup.cashloanflowboss.utils.JSONTools;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.annotation.Order;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionException;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
/**
* 加载优先级 高于 ChannelRoleCheckAspect
* function:
* date: 2019/8/6
*
* @author: suntao
*/
@Slf4j
@Component
@Aspect
@Order(1)
public class ChannelRoleLoadAspect {
@Pointcut("@annotation(cn.quantgroup.cashloanflowboss.core.annotation.channelrole.ChannelIdInit)")
private void channelIdInit() {}
@Around(value = "channelIdInit()")
public Object channelIdInitBefore(ProceedingJoinPoint pjp) {
Object[] args = pjp.getArgs();
MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
Method method = methodSignature.getMethod();
Principal principal = Application.getPrincipal();
if (principal == null) {
try {
return pjp.proceed(args);
} catch (Throwable throwable) {
log.error("请求失败,e={}", ExceptionUtils.getStackTrace(throwable));
return Result.buildFial();
}
}
// 如果是渠道用户登陆 默认加载channelId
ChannelIdInit annotation = method.getAnnotation(ChannelIdInit.class);
if (annotation != null) {
String channelIdSPEL = annotation.channelIdSPEL();
if (principal.isChannel()) {
if (StringUtils.isNotEmpty(channelIdSPEL)) {
try {
if (channelIdSPEL.startsWith("#this")) {//判断是否是spel表达式
Expression expression = new SpelExpressionParser().parseExpression(channelIdSPEL);
expression.setValue(args, principal.getChannelId());
} else {
log.warn("[channelIdInitBefore]channelIdSPEL设置失败");
}
} catch (ExpressionException e) {
log.error("[channelIdInitBefore]key表达式“" + channelIdSPEL + "”错误:{}", e);
throw e;
}
}
}
}
try {
return pjp.proceed(args);
} catch (Throwable throwable) {
log.error("请求失败,e={}", ExceptionUtils.getStackTrace(throwable));
return Result.buildFial();
}
}
}
...@@ -88,7 +88,7 @@ public class OperationAspect { ...@@ -88,7 +88,7 @@ public class OperationAspect {
optHistoryLog.setChannelId(orderMapping.getRegisteredFrom()); optHistoryLog.setChannelId(orderMapping.getRegisteredFrom());
optHistoryLog.setOptEnumName(opt); optHistoryLog.setOptEnumName(opt);
optHistoryLog.setOptName(opt.getDesc()); optHistoryLog.setOptName(opt.getDesc());
optHistoryLog.setOptUser(Application.getPrincipal().getUserInfo().getNickname()); optHistoryLog.setOptUser(Application.getPrincipal().getUserInfo().getNickname() + "_" + Application.getPrincipal().getUserInfo().getUsername());
optHistoryLog.setCreateTime(new Date()); optHistoryLog.setCreateTime(new Date());
} else { } else {
log.warn("[operationAnnoAnnSave]orderMapping is null, channelOrderNumber={}" , channelOrderNumber ); log.warn("[operationAnnoAnnSave]orderMapping is null, channelOrderNumber={}" , channelOrderNumber );
......
...@@ -23,7 +23,7 @@ public interface CLFCenterService { ...@@ -23,7 +23,7 @@ public interface CLFCenterService {
List<ApplyRequestHistory> findApplyRequestHistoryBySpecification(OrderBaseModel orderBaseModel); List<ApplyRequestHistory> findApplyRequestHistoryBySpecification(OrderBaseModel orderBaseModel);
Page<ClfChannelConfiguration> findChannelConfigurationByCriteriaQueryPage(Integer pageNumber, Integer pageSize, Long channelId); Page<ClfChannelConfiguration> findChannelConfigurationByCriteriaQueryPage(Integer pageNumber, Integer pageSize, Long channelId, String channelName);
ClfChannelConfiguration findChannelConfigurationByChannelId(Long channelId); ClfChannelConfiguration findChannelConfigurationByChannelId(Long channelId);
......
...@@ -2,7 +2,6 @@ package cn.quantgroup.cashloanflowboss.spi.clf.service; ...@@ -2,7 +2,6 @@ package cn.quantgroup.cashloanflowboss.spi.clf.service;
import cn.quantgroup.cashloanflowboss.api.order.model.OrderBaseModel; import cn.quantgroup.cashloanflowboss.api.order.model.OrderBaseModel;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.*; import cn.quantgroup.cashloanflowboss.spi.clf.entity.*;
import cn.quantgroup.cashloanflowboss.spi.clf.model.KANoticeType;
import cn.quantgroup.cashloanflowboss.spi.clf.repository.*; import cn.quantgroup.cashloanflowboss.spi.clf.repository.*;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -91,7 +90,7 @@ public class CLFCenterServiceImpl implements CLFCenterService{ ...@@ -91,7 +90,7 @@ public class CLFCenterServiceImpl implements CLFCenterService{
} }
@Override @Override
public Page<ClfChannelConfiguration> findChannelConfigurationByCriteriaQueryPage(Integer pageNumber, Integer pageSize, Long channelId) { public Page<ClfChannelConfiguration> findChannelConfigurationByCriteriaQueryPage(Integer pageNumber, Integer pageSize, Long channelId, String channelName) {
return clfChannelConfigurationRepository.findAll((root, criteriaQuery, criteriaBuilder) -> { return clfChannelConfigurationRepository.findAll((root, criteriaQuery, criteriaBuilder) -> {
List<Predicate> predicates = new ArrayList<>(); List<Predicate> predicates = new ArrayList<>();
...@@ -101,6 +100,10 @@ public class CLFCenterServiceImpl implements CLFCenterService{ ...@@ -101,6 +100,10 @@ public class CLFCenterServiceImpl implements CLFCenterService{
predicates.add(criteriaBuilder.equal(root.get("registeredFrom"), channelId.longValue())); predicates.add(criteriaBuilder.equal(root.get("registeredFrom"), channelId.longValue()));
} }
if (StringUtils.isNotEmpty(channelName)) {
predicates.add(criteriaBuilder.like(root.get("channelName"), "%" + channelName + "%"));
}
// 设置查询条件 // 设置查询条件
criteriaQuery.where(criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]))); criteriaQuery.where(criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])));
// 指定排序 // 指定排序
......
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