Commit 29567717 authored by suntao's avatar suntao

通过注解 写入opt操作日志

parent c152ec2b
...@@ -3,8 +3,8 @@ package cn.quantgroup.cashloanflowboss.api.channel.controller; ...@@ -3,8 +3,8 @@ package cn.quantgroup.cashloanflowboss.api.channel.controller;
import cn.quantgroup.cashloanflowboss.api.channel.model.ChannelConfVo; import cn.quantgroup.cashloanflowboss.api.channel.model.ChannelConfVo;
import cn.quantgroup.cashloanflowboss.api.channel.service.ChannelConfService; import cn.quantgroup.cashloanflowboss.api.channel.service.ChannelConfService;
import cn.quantgroup.cashloanflowboss.component.security.annotiation.Security; import cn.quantgroup.cashloanflowboss.component.security.annotiation.Security;
import cn.quantgroup.cashloanflowboss.core.annotation.ChannelIdInit; import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.ChannelIdInit;
import cn.quantgroup.cashloanflowboss.core.annotation.CheckChannelRole; import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.CheckChannelRole;
import cn.quantgroup.cashloanflowboss.core.base.Result; import cn.quantgroup.cashloanflowboss.core.base.Result;
import cn.quantgroup.cashloanflowboss.spi.clf.service.CLFCenterService; import cn.quantgroup.cashloanflowboss.spi.clf.service.CLFCenterService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
......
...@@ -2,6 +2,7 @@ package cn.quantgroup.cashloanflowboss.api.login.model; ...@@ -2,6 +2,7 @@ package cn.quantgroup.cashloanflowboss.api.login.model;
import cn.quantgroup.cashloanflowboss.api.role.entity.Role; import cn.quantgroup.cashloanflowboss.api.role.entity.Role;
import cn.quantgroup.cashloanflowboss.api.user.dictionary.UserRank; import cn.quantgroup.cashloanflowboss.api.user.dictionary.UserRank;
import cn.quantgroup.cashloanflowboss.api.user.model.UserInfo;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
...@@ -17,7 +18,7 @@ public class Principal { ...@@ -17,7 +18,7 @@ public class Principal {
/** /**
* 用户ID * 用户ID
*/ */
private Long userId; private UserInfo userInfo;
/** /**
* 用户级别 * 用户级别
......
...@@ -3,6 +3,7 @@ package cn.quantgroup.cashloanflowboss.api.login.service; ...@@ -3,6 +3,7 @@ package cn.quantgroup.cashloanflowboss.api.login.service;
import cn.quantgroup.cashloanflowboss.api.login.model.Principal; import cn.quantgroup.cashloanflowboss.api.login.model.Principal;
import cn.quantgroup.cashloanflowboss.api.user.dictionary.UserStatus; import cn.quantgroup.cashloanflowboss.api.user.dictionary.UserStatus;
import cn.quantgroup.cashloanflowboss.api.user.entity.User; import cn.quantgroup.cashloanflowboss.api.user.entity.User;
import cn.quantgroup.cashloanflowboss.api.user.model.UserInfo;
import cn.quantgroup.cashloanflowboss.api.user.service.UserServiceImpl; import cn.quantgroup.cashloanflowboss.api.user.service.UserServiceImpl;
import cn.quantgroup.cashloanflowboss.core.asserts.Assert; import cn.quantgroup.cashloanflowboss.core.asserts.Assert;
import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationDictionary; import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationDictionary;
...@@ -54,7 +55,12 @@ public class LogService { ...@@ -54,7 +55,12 @@ public class LogService {
// 设置用户主要信息 // 设置用户主要信息
Principal principal = new Principal(); Principal principal = new Principal();
principal.setUserId(user.getId()); UserInfo userInfo = new UserInfo();
userInfo.setUserId(user.getId());
userInfo.setUsername(user.getUsername());
userInfo.setNickname(user.getNickname());
principal.setUserInfo(userInfo);
principal.setChannelId(user.getChannelId()); principal.setChannelId(user.getChannelId());
principal.setRank(user.getRank()); principal.setRank(user.getRank());
principal.setRoles(user.getRoles()); principal.setRoles(user.getRoles());
......
...@@ -4,11 +4,12 @@ import cn.quantgroup.cashloanflowboss.api.order.model.LendingFormModel; ...@@ -4,11 +4,12 @@ import cn.quantgroup.cashloanflowboss.api.order.model.LendingFormModel;
import cn.quantgroup.cashloanflowboss.api.order.service.OrderService; import cn.quantgroup.cashloanflowboss.api.order.service.OrderService;
import cn.quantgroup.cashloanflowboss.component.security.annotiation.Security; 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.ChannelIdInit; import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.ChannelIdInit;
import cn.quantgroup.cashloanflowboss.core.annotation.CheckChannelRole; import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.CheckChannelRole;
import cn.quantgroup.cashloanflowboss.core.annotation.CheckChannelRoleByChannelOrderNumber; 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.*;
...@@ -63,7 +64,7 @@ public class OrderController { ...@@ -63,7 +64,7 @@ public class OrderController {
public Result approveOpt(@RequestBody @Valid ApproveVo approveVo) { public Result approveOpt(@RequestBody @Valid ApproveVo approveVo) {
if (Application.isDebug()) { if (Application.isDebug()) {
Tuple<Boolean, Boolean> approveOptBooleanAndFundSettingBooleanTuple = orderService.approveOpt(approveVo); ThreeTuple<Boolean, Boolean, String> approveOptBooleanAndFundSettingBooleanTuple = orderService.approveOpt(approveVo);
Boolean approveResult = approveOptBooleanAndFundSettingBooleanTuple.getKey(); Boolean approveResult = approveOptBooleanAndFundSettingBooleanTuple.getKey();
if (approveResult) { if (approveResult) {
return Result.buildSuccess(approveResult, approveOptBooleanAndFundSettingBooleanTuple.getValue() ? "审批操作成功" : "请检查资产计划配置,审批操作成功"); return Result.buildSuccess(approveResult, approveOptBooleanAndFundSettingBooleanTuple.getValue() ? "审批操作成功" : "请检查资产计划配置,审批操作成功");
......
...@@ -5,6 +5,7 @@ import cn.quantgroup.cashloanflowboss.api.order.model.HistoryOrderStatusVoModel; ...@@ -5,6 +5,7 @@ import cn.quantgroup.cashloanflowboss.api.order.model.HistoryOrderStatusVoModel;
import cn.quantgroup.cashloanflowboss.api.order.model.LendingFormModel; import cn.quantgroup.cashloanflowboss.api.order.model.LendingFormModel;
import cn.quantgroup.cashloanflowboss.api.order.model.OrderVo; import cn.quantgroup.cashloanflowboss.api.order.model.OrderVo;
import cn.quantgroup.cashloanflowboss.core.base.Tuple; import cn.quantgroup.cashloanflowboss.core.base.Tuple;
import cn.quantgroup.cashloanflowboss.core.tuple.ThreeTuple;
import cn.quantgroup.cashloanflowboss.spi.clf.model.CallbackRecordVoModel; import cn.quantgroup.cashloanflowboss.spi.clf.model.CallbackRecordVoModel;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -20,7 +21,7 @@ import java.util.List; ...@@ -20,7 +21,7 @@ import java.util.List;
public interface OrderService { public interface OrderService {
Page<OrderVo> orderList(Long channelId, String channelOrderNo, String applyNo, Long loanId, Integer pageNumber, Integer pageSize); Page<OrderVo> orderList(Long channelId, String channelOrderNo, String applyNo, Long loanId, Integer pageNumber, Integer pageSize);
Tuple<Boolean, Boolean> approveOpt(ApproveVo approveVo); ThreeTuple<Boolean, Boolean, String> approveOpt(ApproveVo approveVo);
/** /**
* *
......
...@@ -2,6 +2,9 @@ package cn.quantgroup.cashloanflowboss.api.order.service; ...@@ -2,6 +2,9 @@ package cn.quantgroup.cashloanflowboss.api.order.service;
import cn.quantgroup.cashloanflowboss.api.optlog.entity.OptHistoryLog; import cn.quantgroup.cashloanflowboss.api.optlog.entity.OptHistoryLog;
import cn.quantgroup.cashloanflowboss.api.optlog.model.OptEnumName; import cn.quantgroup.cashloanflowboss.api.optlog.model.OptEnumName;
import cn.quantgroup.cashloanflowboss.api.optlog.service.OptHistoryLogServiceImpl; import cn.quantgroup.cashloanflowboss.api.optlog.service.OptHistoryLogServiceImpl;
import cn.quantgroup.cashloanflowboss.core.annotation.opt.OperationAnno;
import cn.quantgroup.cashloanflowboss.core.base.Tuple;
import cn.quantgroup.cashloanflowboss.core.tuple.ThreeTuple;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.CallbackFailRecord; import cn.quantgroup.cashloanflowboss.spi.clf.entity.CallbackFailRecord;
import cn.quantgroup.cashloanflowboss.spi.clf.model.LoanProgress; import cn.quantgroup.cashloanflowboss.spi.clf.model.LoanProgress;
...@@ -14,7 +17,6 @@ import cn.quantgroup.cashloanflowboss.api.order.repository.OrderApproveRepositor ...@@ -14,7 +17,6 @@ import cn.quantgroup.cashloanflowboss.api.order.repository.OrderApproveRepositor
import cn.quantgroup.cashloanflowboss.api.order.util.OrderUtil; import cn.quantgroup.cashloanflowboss.api.order.util.OrderUtil;
import cn.quantgroup.cashloanflowboss.core.Application; import cn.quantgroup.cashloanflowboss.core.Application;
import cn.quantgroup.cashloanflowboss.core.base.ServiceResult; import cn.quantgroup.cashloanflowboss.core.base.ServiceResult;
import cn.quantgroup.cashloanflowboss.core.base.Tuple;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.CallbackRecord; import cn.quantgroup.cashloanflowboss.spi.clf.entity.CallbackRecord;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderMapping; import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderMapping;
import cn.quantgroup.cashloanflowboss.spi.clf.model.CallbackRecordVoModel; import cn.quantgroup.cashloanflowboss.spi.clf.model.CallbackRecordVoModel;
...@@ -180,8 +182,9 @@ public class OrderServiceImpl implements OrderService{ ...@@ -180,8 +182,9 @@ public class OrderServiceImpl implements OrderService{
* @return Tuple<Boolean 审批结果 true 审批完成 false 审批操作失败, Boolean 资产计划配置 true 配置没问题 false 配置需要检查> * @return Tuple<Boolean 审批结果 true 审批完成 false 审批操作失败, Boolean 资产计划配置 true 配置没问题 false 配置需要检查>
*/ */
@OperationAnno(channelNo = "#this[0].channelOrderNumber", opt = OptEnumName.AUDIT, succSPEL = "#this.key", optDetailSPEL = "#this.ex")
@Override @Override
public Tuple<Boolean, Boolean> approveOpt(ApproveVo approveVo) { public ThreeTuple<Boolean, Boolean, String> approveOpt(ApproveVo approveVo) {
log.info("approveOpt,审批操作入参,approveVo={}", JSONTools.serialize(approveVo)); log.info("approveOpt,审批操作入参,approveVo={}", JSONTools.serialize(approveVo));
...@@ -197,24 +200,24 @@ public class OrderServiceImpl implements OrderService{ ...@@ -197,24 +200,24 @@ public class OrderServiceImpl implements OrderService{
ClfOrderMapping orderMapping = clfOrderMappingRepository.findByChannelOrderNoLastOne(approveVo.getChannelOrderNumber()); ClfOrderMapping orderMapping = clfOrderMappingRepository.findByChannelOrderNoLastOne(approveVo.getChannelOrderNumber());
if (orderMapping == null) { if (orderMapping == null) {
log.info("approveOpt,审批失败,无订单 channelOrderNumber={}", approveVo.getChannelOrderNumber()); log.info("approveOpt,审批失败,无订单 channelOrderNumber={}", approveVo.getChannelOrderNumber());
return new Tuple<>(false, false); return new ThreeTuple(false, false, "审批失败,无订单");
} }
if (Application.getPrincipal().isChannel() && !Application.getPrincipal().isSameChannel(orderMapping.getRegisteredFrom())) { if (Application.getPrincipal().isChannel() && !Application.getPrincipal().isSameChannel(orderMapping.getRegisteredFrom())) {
log.info("approveOpt,审批失败,不是该渠道订单无法审批 channelOrderNumber={}", approveVo.getChannelOrderNumber()); log.info("approveOpt,审批失败,不是该渠道订单无法审批 channelOrderNumber={}", approveVo.getChannelOrderNumber());
return new Tuple<>(false, false); return new ThreeTuple(false, false, "审批失败,不是该渠道订单无法审批");
} }
XUser xUser = xyqbUserService.findXUserById(orderMapping.getQgUserId()); XUser xUser = xyqbUserService.findXUserById(orderMapping.getQgUserId());
if (xUser == null) { if (xUser == null) {
log.info("approveOpt,审批失败,未找到用户 channelOrderNumber={}", approveVo.getChannelOrderNumber()); log.info("approveOpt,审批失败,未找到用户 channelOrderNumber={}", approveVo.getChannelOrderNumber());
return new Tuple<>(false, false); return new ThreeTuple(false, false, "审批失败,未找到用户");
} }
ChannelConf channelConf = channelConfRepository.getByChannelId(orderMapping.getRegisteredFrom()); ChannelConf channelConf = channelConfRepository.getByChannelId(orderMapping.getRegisteredFrom());
if (channelConf == null) { if (channelConf == null) {
log.info("approveOpt,审批失败,boss渠道配置为空 channelOrderNumber={}", approveVo.getChannelOrderNumber()); log.info("approveOpt,审批失败,boss渠道配置为空 channelOrderNumber={}", approveVo.getChannelOrderNumber());
return new Tuple<>(false, false); return new ThreeTuple(false, false, "审批失败,boss渠道配置为空");
} }
// 额度有效期 // 额度有效期
...@@ -268,7 +271,7 @@ public class OrderServiceImpl implements OrderService{ ...@@ -268,7 +271,7 @@ public class OrderServiceImpl implements OrderService{
corpPolicyValidate = xyqbCenterService.validateCorpPolicy(Long.valueOf(fundId), new Date()); corpPolicyValidate = xyqbCenterService.validateCorpPolicy(Long.valueOf(fundId), new Date());
} catch (Exception e) { } catch (Exception e) {
log.error("审批,资方校验异常,channelOrderNumber={},fundId={}, e={}", orderMapping.getChannelOrderNo(), fundId, ExceptionUtils.getStackTrace(e)); log.error("[approveOpt]审批,资方校验异常,channelOrderNumber={},fundId={}, e={}", orderMapping.getChannelOrderNo(), fundId, ExceptionUtils.getStackTrace(e));
} }
// 操作记录 // 操作记录
...@@ -289,17 +292,17 @@ public class OrderServiceImpl implements OrderService{ ...@@ -289,17 +292,17 @@ public class OrderServiceImpl implements OrderService{
optHistoryLog.setOptResult(true); optHistoryLog.setOptResult(true);
optResult = true; optResult = true;
log.info("审批申请成功,channelOrderNumber={}", orderMapping.getChannelOrderNo()); log.info("[approveOpt]审批申请成功,channelOrderNumber={}", orderMapping.getChannelOrderNo());
} else { } else {
optLogDetail = optLogDetail.concat("审批失败"); optLogDetail = optLogDetail.concat("clotho审批失败");
optHistoryLog.setOptResult(false); optHistoryLog.setOptResult(false);
log.info("审批申请失败,channelOrderNumber={},requestParam={}", orderMapping.getChannelOrderNo(), JSONTools.serialize(data)); log.info("[approveOpt]审批申请失败,channelOrderNumber={},requestParam={}", orderMapping.getChannelOrderNo(), JSONTools.serialize(data));
optResult = false; optResult = false;
} }
optHistoryLog.setOptLogDetail(optLogDetail); optHistoryLog.setOptLogDetail(optLogDetail);
optHistoryLogService.save(optHistoryLog); //optHistoryLogService.save(optHistoryLog);
return new Tuple<>(optResult, corpPolicyValidate); return new ThreeTuple(optResult, corpPolicyValidate, optLogDetail);
} }
/** /**
...@@ -311,7 +314,7 @@ public class OrderServiceImpl implements OrderService{ ...@@ -311,7 +314,7 @@ public class OrderServiceImpl implements OrderService{
*/ */
@Transactional @Transactional
@Override @Override
public Tuple<Boolean, String> secondAudit(String channelOrderNumber) { public Tuple<Boolean, String> secondAudit(String channelOrderNumber) {
OptEnumName secondAudit = OptEnumName.SECORD_AUDIT; OptEnumName secondAudit = OptEnumName.SECORD_AUDIT;
......
...@@ -4,6 +4,7 @@ import cn.quantgroup.cashloanflowboss.api.optlog.entity.OptHistoryLog; ...@@ -4,6 +4,7 @@ import cn.quantgroup.cashloanflowboss.api.optlog.entity.OptHistoryLog;
import cn.quantgroup.cashloanflowboss.api.optlog.model.OptEnumName; import cn.quantgroup.cashloanflowboss.api.optlog.model.OptEnumName;
import cn.quantgroup.cashloanflowboss.api.order.entity.OrderApprove; import cn.quantgroup.cashloanflowboss.api.order.entity.OrderApprove;
import cn.quantgroup.cashloanflowboss.core.base.Tuple; import cn.quantgroup.cashloanflowboss.core.base.Tuple;
import cn.quantgroup.cashloanflowboss.core.tuple.ThreeTuple;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ApplyRequestHistory; import cn.quantgroup.cashloanflowboss.spi.clf.entity.ApplyRequestHistory;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderMapping; import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderMapping;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.WithdrawRecord; import cn.quantgroup.cashloanflowboss.spi.clf.entity.WithdrawRecord;
...@@ -11,7 +12,6 @@ import cn.quantgroup.cashloanflowboss.spi.clf.model.KANoticeType; ...@@ -11,7 +12,6 @@ import cn.quantgroup.cashloanflowboss.spi.clf.model.KANoticeType;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.awt.font.OpenType;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
......
...@@ -9,7 +9,6 @@ import com.google.common.collect.Lists; ...@@ -9,7 +9,6 @@ import com.google.common.collect.Lists;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
import java.util.Set;
@Data @Data
public class UserDetailInfo { public class UserDetailInfo {
...@@ -30,21 +29,15 @@ public class UserDetailInfo { ...@@ -30,21 +29,15 @@ public class UserDetailInfo {
} }
} }
@Data public static UserDetailInfo valueOf(Principal principal) {
public static class UserInfo {
private Long userId;
private String userName;
private String nickname;
}
public static UserDetailInfo valueOf(Principal principal, User user) {
Assert.isNull(principal, ApplicationStatus.INVALID_USER); Assert.isNull(principal, ApplicationStatus.INVALID_USER);
UserDetailInfo userDetailInfo = new UserDetailInfo(); UserDetailInfo userDetailInfo = new UserDetailInfo();
Long userId = principal.getUserId(); Long userId = principal.getUserInfo().getUserId();
userDetailInfo.setRank(principal.getRank().name()); userDetailInfo.setRank(principal.getRank().name());
userDetailInfo.setChannelId(principal.getChannelId()); userDetailInfo.setChannelId(principal.getChannelId());
List<Role> roles = principal.getRoles(); List<Role> roles = principal.getRoles();
if (null != roles && roles.size() > 0) { if (null != roles && roles.size() > 0) {
RoleInfo roleInfo = new RoleInfo(); RoleInfo roleInfo = new RoleInfo();
List<RoleInfo.roleView> roleInfos = Lists.newArrayList(); List<RoleInfo.roleView> roleInfos = Lists.newArrayList();
...@@ -60,8 +53,8 @@ public class UserDetailInfo { ...@@ -60,8 +53,8 @@ public class UserDetailInfo {
UserInfo userInfo = new UserInfo(); UserInfo userInfo = new UserInfo();
userInfo.setUserId(userId); userInfo.setUserId(userId);
userInfo.setNickname(user.getNickname()); userInfo.setNickname(principal.getUserInfo().getNickname());
userInfo.setUserName(user.getUsername()); userInfo.setUsername(principal.getUserInfo().getUsername());
userDetailInfo.setUserInfo(userInfo); userDetailInfo.setUserInfo(userInfo);
return userDetailInfo; return userDetailInfo;
......
package cn.quantgroup.cashloanflowboss.api.user.model;
import lombok.Data;
/**
* function:
* date: 2019/9/23
*
* @author: suntao
*/
@Data
public class UserInfo {
private Long userId;
private String username;
private String nickname;
}
...@@ -148,9 +148,7 @@ public class UserServiceImpl implements UserService{ ...@@ -148,9 +148,7 @@ public class UserServiceImpl implements UserService{
Principal principal = Application.getPrincipal(); Principal principal = Application.getPrincipal();
Assert.isNull(principal, ApplicationStatus.INVALID_USER); Assert.isNull(principal, ApplicationStatus.INVALID_USER);
User user = userRepository.findById(principal.getUserId()); return UserDetailInfo.valueOf(principal);
return UserDetailInfo.valueOf(principal, user);
} }
......
package cn.quantgroup.cashloanflowboss.core.annotation; package cn.quantgroup.cashloanflowboss.core.annotation.channelrole;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.Target; import java.lang.annotation.Target;
......
package cn.quantgroup.cashloanflowboss.core.annotation; package cn.quantgroup.cashloanflowboss.core.annotation.channelrole;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.Target; import java.lang.annotation.Target;
......
package cn.quantgroup.cashloanflowboss.core.annotation; package cn.quantgroup.cashloanflowboss.core.annotation.channelrole;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.Target; import java.lang.annotation.Target;
......
package cn.quantgroup.cashloanflowboss.core.annotation.opt;
import cn.quantgroup.cashloanflowboss.api.optlog.model.OptEnumName;
import java.lang.annotation.*;
/**
* function:
* date: 2019/9/23
*
* @author: suntao
*/
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface OperationAnno {
/**
* 渠道订单号
* @return
*/
String channelNo();
/**
* 操作名
* @return
*/
OptEnumName opt();
/**
* 是否成功
* 返回表达式
* @return
*/
String succSPEL();
/**
* opt详细表达式
* 返回表达式
* @return
*/
String optDetailSPEL();
}
package cn.quantgroup.cashloanflowboss.core.aspect;
import java.util.Date;
import cn.quantgroup.cashloanflowboss.api.optlog.entity.OptHistoryLog;
import cn.quantgroup.cashloanflowboss.api.optlog.model.OptEnumName;
import cn.quantgroup.cashloanflowboss.api.optlog.service.OptHistoryLogServiceImpl;
import cn.quantgroup.cashloanflowboss.core.Application;
import cn.quantgroup.cashloanflowboss.core.annotation.opt.OperationAnno;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderMapping;
import cn.quantgroup.cashloanflowboss.spi.clf.service.CLFCenterService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
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.beans.factory.annotation.Autowired;
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;
/**
* function:
* date: 2019/9/23
*
* @author: suntao
*/
@Slf4j
@Component
@Aspect
public class OperationAspect {
@Autowired
private CLFCenterService clfCenterService;
@Autowired
private OptHistoryLogServiceImpl optHistoryLogService;
@Pointcut("@annotation(cn.quantgroup.cashloanflowboss.core.annotation.opt.OperationAnno)")
private void operationAnno() {}
/**
* @param pjp
* @return
* @throws
*/
@Around("operationAnno()")
private Object operationAnnoAndSave(ProceedingJoinPoint pjp) throws Throwable {
MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
Method method = methodSignature.getMethod();
OperationAnno annotation = method.getAnnotation(OperationAnno.class);
Object[] args = pjp.getArgs();
OptEnumName opt = annotation.opt();
String succSPEL = annotation.succSPEL();
String optDetailSPEL = annotation.optDetailSPEL();
String channelOrderNumber = "";
if (StringUtils.isNotBlank(annotation.channelNo())) {
String keySPEL = annotation.channelNo();
try {
if (keySPEL.startsWith("#this")) {//判断是否是spel表达式
Expression expression = new SpelExpressionParser().parseExpression(keySPEL);
String value = expression.getValue(args, String.class);
channelOrderNumber = value;
} else {
log.warn("[operationAnnoAnnSave]channelOrderNumber获取失败");
}
} catch (ExpressionException e) {
log.error("[operationAnnoAnnSave]key表达式“" + keySPEL + "”错误:{}", e);
throw e;
}
}
OptHistoryLog optHistoryLog = new OptHistoryLog();
if (StringUtils.isNotEmpty(channelOrderNumber)) {
ClfOrderMapping orderMapping = clfCenterService.findOrderMappingByChannelOrderNo(channelOrderNumber);
if (orderMapping != null) {
// do some
optHistoryLog.setChannelOrderNumber(channelOrderNumber);
optHistoryLog.setCreditNumber(orderMapping.getApplyNo());
optHistoryLog.setLoanId(orderMapping.getLoanId());
optHistoryLog.setChannelId(orderMapping.getRegisteredFrom());
optHistoryLog.setOptEnumName(opt);
optHistoryLog.setOptName(opt.getDesc());
optHistoryLog.setOptUser(Application.getPrincipal().getUserInfo().getNickname());
optHistoryLog.setCreateTime(new Date());
} else {
log.warn("[operationAnnoAnnSave]orderMapping is null, channelOrderNumber={}" , channelOrderNumber );
return pjp.proceed();
}
} else {
log.warn("[operationAnnoAnnSave]channelOrderNumber is empty, channelOrderNumber={}" , channelOrderNumber );
return pjp.proceed();
}
Object proceed = pjp.proceed();
if (StringUtils.isNotEmpty(succSPEL)) {
try {
if (succSPEL.startsWith("#this")) {//判断是否是spel表达式
Expression expression = new SpelExpressionParser().parseExpression(succSPEL);
Boolean isSuccess = expression.getValue(proceed, Boolean.class);
optHistoryLog.setOptResult(isSuccess);
} else {
log.warn("[operationAnnoAnnSave]optResult获取失败");
}
} catch (ExpressionException e) {
log.error("[operationAnnoAnnSave]key表达式“" + succSPEL + "”错误:{}", e);
throw e;
}
}
if (StringUtils.isNotEmpty(optDetailSPEL)) {
try {
if (optDetailSPEL.startsWith("#this")) {//判断是否是spel表达式
Expression expression = new SpelExpressionParser().parseExpression(optDetailSPEL);
String optDetail = expression.getValue(proceed, String.class);
optHistoryLog.setOptLogDetail(optDetail);
} else {
log.warn("[operationAnnoAnnSave]optDetail获取失败");
}
} catch (ExpressionException e) {
log.error("[operationAnnoAnnSave]key表达式“" + optDetailSPEL + "”错误:{}", e);
throw e;
}
}
optHistoryLogService.save(optHistoryLog);
return proceed;
}
}
...@@ -4,9 +4,9 @@ import cn.quantgroup.cashloanflowboss.api.channel.model.ChannelConfVo; ...@@ -4,9 +4,9 @@ import cn.quantgroup.cashloanflowboss.api.channel.model.ChannelConfVo;
import cn.quantgroup.cashloanflowboss.api.channel.util.ChannelConfUtil; 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.ChannelIdInit; import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.ChannelIdInit;
import cn.quantgroup.cashloanflowboss.core.annotation.CheckChannelRole; import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.CheckChannelRole;
import cn.quantgroup.cashloanflowboss.core.annotation.CheckChannelRoleByChannelOrderNumber; 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;
......
package cn.quantgroup.cashloanflowboss.core.tuple;
import cn.quantgroup.cashloanflowboss.core.base.Tuple;
/**
* function:
* date: 2019/9/23
*
* @author: suntao
*/
public class ThreeTuple<T, V, D> extends Tuple<T, V> {
public final D ex;
public ThreeTuple(T a, V b, D d) {
super(a, b);
ex = d;
}
}
package cn.quantgroup.cashloanflowboss.spi.clf.service; package cn.quantgroup.cashloanflowboss.spi.clf.service;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderMapping;
import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
......
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