Commit 552affa0 authored by suntao's avatar suntao

sonar

parent bc96f8c3
......@@ -102,27 +102,25 @@ public class ChannelConfUtil {
public static List<ClfOrderCallBack> convert2ClfOrderCallback(Long channelId, ChannelConfAddModel addModel) {
List<ClfOrderCallBack> list = new ArrayList<>();
if (StringUtils.isNotEmpty(addModel.getApproveCallBackUrl())) {
//审批
ClfOrderCallBack clfOrderCallBack1 = new ClfOrderCallBack();
clfOrderCallBack1.setCallbackStatus(KANoticeType.FUAD_ASSIFN_SUCC);
clfOrderCallBack1.setRegisteredFrom(channelId);
clfOrderCallBack1.setCallbackUrl(addModel.getApproveCallBackUrl());
clfOrderCallBack1.setIsActive(true);
clfOrderCallBack1.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack1);
approveCallbackUrl(channelId, addModel, list);
ClfOrderCallBack clfOrderCallBack2 = new ClfOrderCallBack();
clfOrderCallBack2.setCallbackStatus(KANoticeType.REJECT);
clfOrderCallBack2.setRegisteredFrom(channelId);
clfOrderCallBack2.setCallbackUrl(addModel.getApproveCallBackUrl());
clfOrderCallBack2.setIsActive(true);
clfOrderCallBack2.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack2);
orderStatusOrderCallback(channelId, addModel, list);
if (StringUtils.isNotEmpty(addModel.getRepaymentPlanCallBackUrl())) {
ClfOrderCallBack clfOrderCallBack10 = new ClfOrderCallBack();
clfOrderCallBack10.setCallbackStatus(KANoticeType.REPAYMENT);
clfOrderCallBack10.setRegisteredFrom(channelId);
clfOrderCallBack10.setCallbackUrl(addModel.getRepaymentPlanCallBackUrl());
clfOrderCallBack10.setIsActive(true);
clfOrderCallBack10.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack10);
}
if (StringUtils.isNotEmpty(addModel.getOrderStatusCallBackUrl())) {
return list;
}
private static void orderStatusOrderCallback(Long channelId, ChannelConfAddModel addModel, List<ClfOrderCallBack> list) {
if (StringUtils.isNotEmpty(addModel.getOrderStatusCallBackUrl())) {
// 状态
ClfOrderCallBack clfOrderCallBack0 = new ClfOrderCallBack();
clfOrderCallBack0.setCallbackStatus(KANoticeType.CREDIT_SUCC);
......@@ -188,18 +186,27 @@ public class ChannelConfUtil {
clfOrderCallBack9.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack9);
}
}
if (StringUtils.isNotEmpty(addModel.getRepaymentPlanCallBackUrl())) {
ClfOrderCallBack clfOrderCallBack10 = new ClfOrderCallBack();
clfOrderCallBack10.setCallbackStatus(KANoticeType.REPAYMENT);
clfOrderCallBack10.setRegisteredFrom(channelId);
clfOrderCallBack10.setCallbackUrl(addModel.getRepaymentPlanCallBackUrl());
clfOrderCallBack10.setIsActive(true);
clfOrderCallBack10.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack10);
}
private static void approveCallbackUrl(Long channelId, ChannelConfAddModel addModel, List<ClfOrderCallBack> list) {
if (StringUtils.isNotEmpty(addModel.getApproveCallBackUrl())) {
//审批
ClfOrderCallBack clfOrderCallBack1 = new ClfOrderCallBack();
clfOrderCallBack1.setCallbackStatus(KANoticeType.FUAD_ASSIFN_SUCC);
clfOrderCallBack1.setRegisteredFrom(channelId);
clfOrderCallBack1.setCallbackUrl(addModel.getApproveCallBackUrl());
clfOrderCallBack1.setIsActive(true);
clfOrderCallBack1.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack1);
return list;
ClfOrderCallBack clfOrderCallBack2 = new ClfOrderCallBack();
clfOrderCallBack2.setCallbackStatus(KANoticeType.REJECT);
clfOrderCallBack2.setRegisteredFrom(channelId);
clfOrderCallBack2.setCallbackUrl(addModel.getApproveCallBackUrl());
clfOrderCallBack2.setIsActive(true);
clfOrderCallBack2.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack2);
}
}
public static Integer getFundIdByType(Integer fundType, ChannelConf channelConf) {
......
......@@ -33,10 +33,10 @@ public interface OrderService {
* @param channelOrderNumber
* @return 《是否成功 , msg》
*/
@Transactional
@Transactional(rollbackFor = Exception.class)
Tuple<Boolean, String> secondAudit(String channelOrderNumber);
@Transactional
@Transactional(rollbackFor = Exception.class)
Tuple<Boolean, String> lending(LendingFormModel lendingFormModel);
HistoryOrderStatusVoModel getOrderHistoryStatus(String channelOrderNumber);
......
......@@ -4,6 +4,7 @@ import cn.quantgroup.cashloanflowboss.api.optlog.model.OptEnumName;
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.constants.Constants;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.CallbackFailRecord;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfChannelConfiguration;
import cn.quantgroup.cashloanflowboss.spi.clf.model.KANoticeType;
......@@ -188,65 +189,33 @@ public class OrderServiceImpl implements OrderService{
@OperationAnno(channelNo = "#this[0].channelOrderNumber", opt = OptEnumName.AUDIT, succSPEL = "#this.key", optDetailSPEL = "#this.value")
@Override
public Tuple<Boolean, String> approveOpt(ApproveVo approveVo) {
log.info("approveOpt,审批操作入参,approveVo={}", JSONTools.serialize(approveVo));
if (StringUtils.isEmpty(approveVo.getAmount())) {
// 如果UI 金额为空 默认4000
approveVo.setAmount("4000");
}
if (approveVo.getPeriod() == null) {
// 如果UI 期数为空 3期
approveVo.setPeriod(3);
}
ClfOrderMapping orderMapping = clfOrderMappingRepository.findByChannelOrderNoLastOne(approveVo.getChannelOrderNumber());
if (orderMapping == null) {
log.info("approveOpt,审批失败,无订单 channelOrderNumber={}", approveVo.getChannelOrderNumber());
return new Tuple(false, "审批失败,无订单");
}
XUser xUser = xyqbUserService.findXUserById(orderMapping.getQgUserId());
if (xUser == null) {
log.info("approveOpt,审批失败,未找到用户 channelOrderNumber={}", approveVo.getChannelOrderNumber());
return new Tuple(false, "审批失败,未找到用户");
}
ChannelConf channelConf = channelConfRepository.getByChannelId(orderMapping.getRegisteredFrom());
if (channelConf == null) {
log.info("approveOpt,审批失败,boss渠道配置为空 channelOrderNumber={}", approveVo.getChannelOrderNumber());
return new Tuple(false, "审批失败,boss渠道配置为空");
}
// 额度有效期
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_YEAR, 7);
Integer fundId = ChannelConfUtil.getFundIdByType(approveVo.getFundType(), channelConf);
// 资方 及 期数额度规则
String fundFormat = String.format(OrderUtil.financeProductsFormat, approveVo.getAmount(), approveVo.getAmount(),
approveVo.getPeriod(), fundId);
OrderApprove orderApproveExsit = orderApproveRepository.findByChannelOrderNumber(approveVo.getChannelOrderNumber());
if (orderApproveExsit != null) {
orderApproveExsit.setFundId(fundId);
orderApproveExsit.setFundType(approveVo.getFundType());
orderApproveExsit.setUpdateTime(new Date());
orderApproveRepository.save(orderApproveExsit);
} else {
OrderApprove orderApprove = new OrderApprove();
orderApprove.setChannelOrderNumber(approveVo.getChannelOrderNumber());
orderApprove.setCreditNumber(orderMapping.getApplyNo());
orderApprove.setChannelId(orderMapping.getRegisteredFrom());
orderApprove.setFundId(fundId);
orderApprove.setFundType(approveVo.getFundType());
orderApprove.setCreateTime(new Date());
orderApprove.setUpdateTime(new Date());
orderApproveRepository.save(orderApprove);
}
saveOrUpdateOrderApprove(approveVo, orderMapping, fundId);
ClfChannelConfiguration clfChannelConfiguration = clfCenterService.findChannelConfigurationByChannelId(orderMapping.getRegisteredFrom());
if (clfChannelConfiguration == null) {
return new Tuple(false, "审批失败,clfChannelConfiguration渠道配置为空");
......@@ -255,20 +224,7 @@ public class OrderServiceImpl implements OrderService{
if (quotaProduct == null) {
return new Tuple(false, "审批失败,xyqb.quota_product配置为空(".concat(clfChannelConfiguration.getXyqbProductId()).concat(")"));
}
Map<String, Object> data = new HashMap<>(16);
data.put("code", 0);
data.put("msg", "success");
data.put("bizChannel", orderMapping.getRegisteredFrom());
data.put("uuid", xUser.getUuid());
data.put("bizNo", orderMapping.getApplyNo());
data.put("bizType", quotaProduct.getProductType());
data.put("auditResult", approveVo.getIsPass());
data.put("amount", approveVo.getAmount());
data.put("deadLine", calendar.getTime().getTime());
data.put("financeProducts", fundFormat);
Map<String, Object> data = getApproveObjectMap(approveVo, orderMapping, xUser, fundFormat, quotaProduct);
// 发起审批
log.info("[approveOpt] 向clotho发起审批,data={}", JSONTools.serialize(data));
String approveStringResult = clothoCenterService.approve(data);
......@@ -278,12 +234,11 @@ public class OrderServiceImpl implements OrderService{
} catch (Exception e) {
log.error("[approveOpt]审批,资方校验异常,channelOrderNumber={},fundId={}, e={}", orderMapping.getChannelOrderNo(), fundId, ExceptionUtils.getStackTrace(e));
}
// 操作记录
String optLogDetail = approveVo.getIsPass() ? "审批通过:(".concat(fundId + "").concat(")") : "审批拒绝:";
Boolean optResult;
if ("success".equals(approveStringResult)) {
if (Constants.SUCCESS.equals(approveStringResult)) {
optLogDetail = optLogDetail.concat(corpPolicyValidate ? "审批操作成功" : "请检查资产配置,请联系管理员配置,审批操作成功");
optResult = true;
log.info("[approveOpt]审批申请成功,channelOrderNumber={}", orderMapping.getChannelOrderNo());
......@@ -300,7 +255,7 @@ public class OrderServiceImpl implements OrderService{
* @param channelOrderNumber
* @return
*/
@Transactional
@Transactional(rollbackFor = Exception.class)
@Override
@OperationAnno(channelNo = "#this[0]", opt = OptEnumName.SECORD_AUDIT, succSPEL = "#this.key", optDetailSPEL = "#this.value")
public Tuple<Boolean, String> secondAudit(String channelOrderNumber) {
......@@ -375,7 +330,7 @@ public class OrderServiceImpl implements OrderService{
* @param lendingFormModel
* @return
*/
@Transactional
@Transactional(rollbackFor = Exception.class)
@Override
@OperationAnno(channelNo = "#this[0].channelOrderNumber", opt = OptEnumName.PAY, succSPEL = "#this.key", optDetailSPEL = "#this.value")
public Tuple<Boolean, String> lending(LendingFormModel lendingFormModel) {
......@@ -416,8 +371,8 @@ public class OrderServiceImpl implements OrderService{
}
log.info("[order_lending][queryLendingRecordCount]查询待打款数量,channelOrderNumber={}, data={}", lendingFormModel.getChannelOrderNumber(), data);
if (data !=null && data.size() > 0) {
if (Objects.nonNull(data.get("totalAmount")) && Objects.nonNull(data.get("totalCount"))) {
result = this.clothoCenterService.lending(orderApprove.getFundId(), new BigDecimal(String.valueOf(data.get("totalAmount"))), Integer.valueOf(String.valueOf(data.get("totalCount"))));
if (Objects.nonNull(data.get(Constants.TOTAL_AMOUNT)) && Objects.nonNull(data.get(Constants.TOTAL_COUNT))) {
result = this.clothoCenterService.lending(orderApprove.getFundId(), new BigDecimal(String.valueOf(data.get(Constants.TOTAL_AMOUNT))), Integer.valueOf(String.valueOf(data.get(Constants.TOTAL_COUNT))));
log.info("[order_lending]直投打款,channelOrderNumber={}, result={}", lendingFormModel.getChannelOrderNumber(), result);
}
}
......@@ -485,10 +440,10 @@ public class OrderServiceImpl implements OrderService{
Long id = cancelPreLoanRepository.cancelPreLoan(orderMapping.getApplyNo());
String response = opCenter.getToken(auth);
JSONObject responseJ = JSONObject.parseObject(response);
if(responseJ != null && responseJ.containsKey("data")){
JSONObject data = (JSONObject) responseJ.get("data");
if(data != null && data.containsKey("token")){
token = String.valueOf(data.get("token"));
if(responseJ != null && responseJ.containsKey(Constants.DATA)){
JSONObject data = (JSONObject) responseJ.get(Constants.DATA);
if(data != null && data.containsKey(Constants.TOKEN)){
token = String.valueOf(data.get(Constants.TOKEN));
}
}
......@@ -504,7 +459,7 @@ public class OrderServiceImpl implements OrderService{
result = clothoCenterService.cancelPreLoan(data,token);
}
JSONObject resp = JSONObject.parseObject(result);
if(Objects.isNull(resp) || Objects.isNull(resp.get("success")) || !"true".equals(String.valueOf(resp.get("success")))){
if(Objects.isNull(resp) || Objects.isNull(resp.get(Constants.SUCCESS)) || !Constants.TRUE.equals(String.valueOf(resp.get(Constants.SUCCESS)))){
cancel = false;
}
}catch (Exception e){
......@@ -582,7 +537,7 @@ public class OrderServiceImpl implements OrderService{
callbackRecordVoModel.setChannelId(callbackRecord.getChannelId());
callbackRecordVoModel.setCreatedAt(callbackRecord.getCreatedAt());
callbackRecordVoModel.setUpdatedAt(callbackRecord.getUpdatedAt());
callbackRecordVoModel.setTableName("Success");
callbackRecordVoModel.setTableName(Constants.SUCCESS);
callbackRecordVoModelList.add(callbackRecordVoModel);
}
}
......@@ -672,7 +627,6 @@ public class OrderServiceImpl implements OrderService{
private Tuple<String, List<OrderVo.OptButton>> getCurrentStatusAndButtons(QueryXyqbOrderStatus currentStatus, ClfOrderMapping orderMapping) {
Tuple tuple = new Tuple();
List<OrderVo.OptButton> buttonList = new ArrayList<>();
if (currentStatus != null) {
if (StringUtils.isNotEmpty(currentStatus.getStatus())) {
OrderVo.OptButton buttonBeforeCancel = new OrderVo.OptButton();
......@@ -680,28 +634,9 @@ public class OrderServiceImpl implements OrderService{
buttonBeforeCancel.setName(OrderVo.OptButtonAction.cancel.getDesc());
switch (currentStatus.getStatus()) {
case "CREDIT_SUCC" :
// 授信成功 需要 审批
OrderVo.OptButton buttonApprove = new OrderVo.OptButton();
buttonApprove.setAction(OrderVo.OptButtonAction.audit.name());
buttonApprove.setName(OrderVo.OptButtonAction.audit.getDesc());
buttonList.add(buttonApprove);
tuple.setKey("授信成功");
tuple.setValue(buttonList);
return tuple;
return getCreditSuccessTuple(tuple, buttonList);
case "APPROVE_ING" :
OptHistoryLog optHistoryLog = optHistoryLogService.findByChannelOrderNumberAndOptNameAndSuccess(orderMapping.getChannelOrderNo(), OptEnumName.AUDIT);
if (optHistoryLog != null) {
tuple.setKey("审批中");
tuple.setValue(buttonList);
} else {
OrderVo.OptButton buttonApprove2 = new OrderVo.OptButton();
buttonApprove2.setAction(OrderVo.OptButtonAction.audit.name());
buttonApprove2.setName(OrderVo.OptButtonAction.audit.getDesc());
buttonList.add(buttonApprove2);
tuple.setKey("授信成功,待审批");
tuple.setValue(buttonList);
}
return tuple;
return getApprovingTuple(orderMapping, tuple, buttonList);
case "REJECT" :
tuple.setKey("审批拒绝");
tuple.setValue(buttonList);
......@@ -712,41 +647,9 @@ public class OrderServiceImpl implements OrderService{
tuple.setValue(buttonList);
return tuple;
case "WITHDRAW_APPROVING" :
tuple.setKey("提现成功,待二次风控审批");
// 更改放款时间,二次风控回调
OrderVo.OptButton secondAudit2 = new OrderVo.OptButton();
secondAudit2.setAction(OrderVo.OptButtonAction.second_audit.name());
secondAudit2.setName(OrderVo.OptButtonAction.second_audit.getDesc());
buttonList.add(secondAudit2);
buttonList.add(buttonBeforeCancel);
tuple.setValue(buttonList);
return tuple;
return getWithdrawApprovingTuple(tuple, buttonList, buttonBeforeCancel);
case "WITHDRAW" :
LoanApplicationHistory loanApplicationHistory = xyqbCenterService.findLoanApplicationHistoryById(orderMapping.getLoanId());
if (loanApplicationHistory != null) {
if (LoanProgress.WAITING_FUND.equals(loanApplicationHistory.getProgress())) {
// 更改放款时间,二次风控回调
// 提现申请成功 需要放款
tuple.setKey("二次风控审批中");
} else if (LoanProgress.FINAL_SENDED_TO_FUNDING_CORP.equals(loanApplicationHistory.getProgress())) {
tuple.setKey("待放款");
OrderVo.OptButton buttonPaySucc = new OrderVo.OptButton();
buttonPaySucc.setAction(OrderVo.OptButtonAction.pay_succ.name());
buttonPaySucc.setName(OrderVo.OptButtonAction.pay_succ.getDesc());
buttonList.add(buttonPaySucc);
OrderApprove orderApprove = orderApproveRepository.findByCreditNumber(orderMapping.getApplyNo());
if (orderApprove != null && orderApprove.getFundType() == 0) {
// 非存管 才有放款失败按钮
OrderVo.OptButton buttonPayFail = new OrderVo.OptButton();
buttonPayFail.setAction(OrderVo.OptButtonAction.pay_fail.name());
buttonPayFail.setName(OrderVo.OptButtonAction.pay_fail.getDesc());
buttonList.add(buttonPayFail);
}
buttonList.add(buttonBeforeCancel);
}
tuple.setValue(buttonList);
}
return tuple;
return getWithdrawTuple(orderMapping, tuple, buttonList, buttonBeforeCancel);
case "PAY_ING" :
tuple.setKey("放款中(等待几分钟)");
buttonList.add(buttonBeforeCancel);
......@@ -789,7 +692,6 @@ public class OrderServiceImpl implements OrderService{
return tuple;
}
}
} else {
tuple.setKey("未知状态");
tuple.setValue(buttonList);
......@@ -799,4 +701,116 @@ public class OrderServiceImpl implements OrderService{
tuple.setValue(buttonList);
return tuple;
}
private Tuple<String, List<OrderVo.OptButton>> getWithdrawTuple(ClfOrderMapping orderMapping, Tuple tuple, List<OrderVo.OptButton> buttonList, OrderVo.OptButton buttonBeforeCancel) {
LoanApplicationHistory loanApplicationHistory = xyqbCenterService.findLoanApplicationHistoryById(orderMapping.getLoanId());
if (loanApplicationHistory != null) {
if (LoanProgress.WAITING_FUND.equals(loanApplicationHistory.getProgress())) {
// 更改放款时间,二次风控回调
// 提现申请成功 需要放款
tuple.setKey("二次风控审批中");
} else if (LoanProgress.FINAL_SENDED_TO_FUNDING_CORP.equals(loanApplicationHistory.getProgress())) {
tuple.setKey("待放款");
OrderVo.OptButton buttonPaySucc = new OrderVo.OptButton();
buttonPaySucc.setAction(OrderVo.OptButtonAction.pay_succ.name());
buttonPaySucc.setName(OrderVo.OptButtonAction.pay_succ.getDesc());
buttonList.add(buttonPaySucc);
OrderApprove orderApprove = orderApproveRepository.findByCreditNumber(orderMapping.getApplyNo());
if (orderApprove != null && orderApprove.getFundType() == 0) {
// 非存管 才有放款失败按钮
OrderVo.OptButton buttonPayFail = new OrderVo.OptButton();
buttonPayFail.setAction(OrderVo.OptButtonAction.pay_fail.name());
buttonPayFail.setName(OrderVo.OptButtonAction.pay_fail.getDesc());
buttonList.add(buttonPayFail);
}
buttonList.add(buttonBeforeCancel);
}
tuple.setValue(buttonList);
}
return tuple;
}
private Tuple<String, List<OrderVo.OptButton>> getWithdrawApprovingTuple(Tuple tuple, List<OrderVo.OptButton> buttonList, OrderVo.OptButton buttonBeforeCancel) {
tuple.setKey("提现成功,待二次风控审批");
// 更改放款时间,二次风控回调
OrderVo.OptButton secondAudit2 = new OrderVo.OptButton();
secondAudit2.setAction(OrderVo.OptButtonAction.second_audit.name());
secondAudit2.setName(OrderVo.OptButtonAction.second_audit.getDesc());
buttonList.add(secondAudit2);
buttonList.add(buttonBeforeCancel);
tuple.setValue(buttonList);
return tuple;
}
private Tuple<String, List<OrderVo.OptButton>> getApprovingTuple(ClfOrderMapping orderMapping, Tuple tuple, List<OrderVo.OptButton> buttonList) {
OptHistoryLog optHistoryLog = optHistoryLogService.findByChannelOrderNumberAndOptNameAndSuccess(orderMapping.getChannelOrderNo(), OptEnumName.AUDIT);
if (optHistoryLog != null) {
tuple.setKey("审批中");
tuple.setValue(buttonList);
} else {
OrderVo.OptButton buttonApprove2 = new OrderVo.OptButton();
buttonApprove2.setAction(OrderVo.OptButtonAction.audit.name());
buttonApprove2.setName(OrderVo.OptButtonAction.audit.getDesc());
buttonList.add(buttonApprove2);
tuple.setKey("授信成功,待审批");
tuple.setValue(buttonList);
}
return tuple;
}
private Tuple<String, List<OrderVo.OptButton>> getCreditSuccessTuple(Tuple tuple, List<OrderVo.OptButton> buttonList) {
// 授信成功 需要 审批
OrderVo.OptButton buttonApprove = new OrderVo.OptButton();
buttonApprove.setAction(OrderVo.OptButtonAction.audit.name());
buttonApprove.setName(OrderVo.OptButtonAction.audit.getDesc());
buttonList.add(buttonApprove);
tuple.setKey("授信成功");
tuple.setValue(buttonList);
return tuple;
}
private Calendar getCalendar() {
// 额度有效期
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_YEAR, 7);
return calendar;
}
private Map<String, Object> getApproveObjectMap(ApproveVo approveVo, ClfOrderMapping orderMapping, XUser xUser, String fundFormat, QuotaProduct quotaProduct) {
Map<String, Object> data = new HashMap<>(16);
data.put("code", 0);
data.put("msg", "success");
data.put("bizChannel", orderMapping.getRegisteredFrom());
data.put("uuid", xUser.getUuid());
data.put("bizNo", orderMapping.getApplyNo());
data.put("bizType", quotaProduct.getProductType());
data.put("auditResult", approveVo.getIsPass());
data.put("amount", approveVo.getAmount());
data.put("deadLine", getCalendar().getTime().getTime());
data.put("financeProducts", fundFormat);
return data;
}
private void saveOrUpdateOrderApprove(ApproveVo approveVo, ClfOrderMapping orderMapping, Integer fundId) {
OrderApprove orderApproveExsit = orderApproveRepository.findByChannelOrderNumber(approveVo.getChannelOrderNumber());
if (orderApproveExsit != null) {
orderApproveExsit.setFundId(fundId);
orderApproveExsit.setFundType(approveVo.getFundType());
orderApproveExsit.setUpdateTime(new Date());
orderApproveRepository.save(orderApproveExsit);
} else {
OrderApprove orderApprove = new OrderApprove();
orderApprove.setChannelOrderNumber(approveVo.getChannelOrderNumber());
orderApprove.setCreditNumber(orderMapping.getApplyNo());
orderApprove.setChannelId(orderMapping.getRegisteredFrom());
orderApprove.setFundId(fundId);
orderApprove.setFundType(approveVo.getFundType());
orderApprove.setCreateTime(new Date());
orderApprove.setUpdateTime(new Date());
orderApproveRepository.save(orderApprove);
}
}
}
......@@ -2,7 +2,6 @@ package cn.quantgroup.cashloanflowboss.api.user.model;
import cn.quantgroup.cashloanflowboss.api.login.model.Principal;
import cn.quantgroup.cashloanflowboss.api.role.entity.Role;
import cn.quantgroup.cashloanflowboss.api.user.entity.User;
import cn.quantgroup.cashloanflowboss.core.asserts.Assert;
import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus;
import com.google.common.collect.Lists;
......@@ -20,10 +19,10 @@ public class UserDetailInfo {
@Data
static class RoleInfo {
List<roleView> roleInfos;
List<RoleView> roleInfos;
@Data
static class roleView {
static class RoleView {
private Long roleId;
private String roleName;
}
......@@ -40,9 +39,9 @@ public class UserDetailInfo {
if (null != roles && roles.size() > 0) {
RoleInfo roleInfo = new RoleInfo();
List<RoleInfo.roleView> roleInfos = Lists.newArrayList();
List<RoleInfo.RoleView> roleInfos = Lists.newArrayList();
roles.forEach(role -> {
RoleInfo.roleView roleView = new RoleInfo.roleView();
RoleInfo.RoleView roleView = new RoleInfo.RoleView();
roleView.setRoleId(role.getId());
roleView.setRoleName(role.getName());
roleInfos.add(roleView);
......
......@@ -23,6 +23,9 @@ import java.util.regex.Pattern;
*/
public class IDValidator {
private static final int int17 = 17;
private static final String s19 = "19";
/**
* 校验码
*/
......@@ -96,11 +99,11 @@ public class IDValidator {
return false;
}
if (Pattern.matches("^[\\d]{15}$", idNumber)) {
if (Pattern.matches(getRegex(), idNumber)) {
return this.validate15(idNumber);
} else if (Pattern.matches("^([\\d]{17}((?i)X))|([\\d]{18})$", idNumber)) {
} else if (Pattern.matches(getRegex2(), idNumber)) {
return this.validate18(idNumber);
......@@ -110,6 +113,14 @@ public class IDValidator {
}
private String getRegex2() {
return "^([\\d]{17}((?i)X))|([\\d]{18})$";
}
private String getRegex() {
return "^[\\d]{15}$";
}
/**
* 验证15位身份证号
*
......@@ -137,12 +148,12 @@ public class IDValidator {
*/
private String convert(String idNumber) {
String newIdNumber = idNumber.substring(0, 6) + "19" + idNumber.substring(6);
String newIdNumber = idNumber.substring(0, 6) + s19 + idNumber.substring(6);
// 校验码
int sum = 0;
for (int i = 0; i < 17; i++) {
for (int i = 0; i < int17; i++) {
int ai = Integer.parseInt(String.valueOf(newIdNumber.charAt(i)));
sum = sum + ai * weights[i];
}
......@@ -219,7 +230,7 @@ public class IDValidator {
int sum = 0;
for (int i = 0; i < 17; i++) {
for (int i = 0; i < int17; i++) {
sum = sum + Integer.parseInt(String.valueOf(idNumber.charAt(i))) * weights[i];
}
......
......@@ -4,6 +4,7 @@ import cn.quantgroup.cashloanflowboss.api.login.model.Principal;
import cn.quantgroup.cashloanflowboss.core.Application;
import cn.quantgroup.cashloanflowboss.core.annotation.channelrole.CheckChannelRole;
import cn.quantgroup.cashloanflowboss.core.base.Result;
import cn.quantgroup.cashloanflowboss.core.constants.Constants;
import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderMapping;
import cn.quantgroup.cashloanflowboss.spi.clf.repository.ClfOrderMappingRepository;
......@@ -75,7 +76,7 @@ public class ChannelRoleCheckAspect {
if (StringUtils.isNotEmpty(channelIdSPEL)) {
// 通过channelId 判断
try {
if (channelIdSPEL.startsWith("#this")) {
if (channelIdSPEL.startsWith(Constants.START_THIS)) {
Expression expression = new SpelExpressionParser().parseExpression(channelIdSPEL);
if (!Application.getPrincipal().getChannelId().equals(expression.getValue(args, Long.class))) {
......@@ -92,7 +93,7 @@ public class ChannelRoleCheckAspect {
} else if (StringUtils.isNotEmpty(channelOrderNumberSPEL)){
// 通过channelOrderNumber 判断
String channelOrderNumber = "";
if (channelOrderNumberSPEL.startsWith("#this")) {
if (channelOrderNumberSPEL.startsWith(Constants.START_THIS)) {
Expression expression = new SpelExpressionParser().parseExpression(channelOrderNumberSPEL);
channelOrderNumber = expression.getValue(args, String.class);
} else {
......
......@@ -4,6 +4,7 @@ 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.core.constants.Constants;
import cn.quantgroup.cashloanflowboss.core.exception.ApplicationException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
......@@ -59,7 +60,7 @@ public class ChannelRoleLoadAspect {
if (principal.isChannel()) {
if (StringUtils.isNotEmpty(channelIdSPEL)) {
try {
if (channelIdSPEL.startsWith("#this")) {//判断是否是spel表达式
if (channelIdSPEL.startsWith(Constants.START_THIS)) {//判断是否是spel表达式
Expression expression = new SpelExpressionParser().parseExpression(channelIdSPEL);
expression.setValue(args, principal.getChannelId());
} else {
......
......@@ -6,6 +6,7 @@ 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.core.constants.Constants;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderMapping;
import cn.quantgroup.cashloanflowboss.spi.clf.service.CLFCenterService;
import lombok.extern.slf4j.Slf4j;
......@@ -52,23 +53,19 @@ public class OperationAspect {
*/
@Around("operationAnno()")
private Object operationAnnoAndSave(ProceedingJoinPoint pjp) throws Throwable {
try {
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表达式
if (keySPEL.startsWith(Constants.START_THIS)) {//判断是否是spel表达式
Expression expression = new SpelExpressionParser().parseExpression(keySPEL);
String value = expression.getValue(args, String.class);
channelOrderNumber = value;
......@@ -85,14 +82,7 @@ public class OperationAspect {
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() + "_" + Application.getPrincipal().getUserInfo().getUsername());
optHistoryLog.setCreateTime(new Date());
getOptHistoryLogBean(opt, channelOrderNumber, optHistoryLog, orderMapping);
} else {
log.warn("[operationAnnoAnnSave]orderMapping is null, channelOrderNumber={}" , channelOrderNumber );
return pjp.proceed();
......@@ -101,36 +91,8 @@ public class OperationAspect {
log.warn("[operationAnnoAnnSave]channelOrderNumber is empty, channelOrderNumber={}" , channelOrderNumber );
return pjp.proceed();
}
// 是否成功SPEL 表达式解析
Expression expressionsuccSPEL = null;
if (StringUtils.isNotEmpty(succSPEL)) {
try {
if (succSPEL.startsWith("#this")) {//判断是否是spel表达式
expressionsuccSPEL = new SpelExpressionParser().parseExpression(succSPEL);
} else {
log.warn("[operationAnnoAnnSave]optResult获取失败");
}
} catch (ExpressionException e) {
log.error("[operationAnnoAnnSave]key表达式“" + succSPEL + "”错误:{}", e);
throw e;
}
}
Expression expressionMsgSPEL = null;
if (StringUtils.isNotEmpty(optDetailSPEL)) {
try {
if (optDetailSPEL.startsWith("#this")) {//判断是否是spel表达式
expressionMsgSPEL = new SpelExpressionParser().parseExpression(optDetailSPEL);
} else {
log.warn("[operationAnnoAnnSave]optDetail获取失败");
}
} catch (ExpressionException e) {
log.error("[operationAnnoAnnSave]key表达式“" + optDetailSPEL + "”错误:{}", e);
throw e;
}
}
Expression expressionsuccSPEL = getIsSuccExpressionSPEL(succSPEL);
Expression expressionMsgSPEL = getMegExpression(optDetailSPEL);
if (StringUtils.isNotEmpty(channelOrderNumber)) {
// 判断是否 已经请求成功过
OptHistoryLog optHistoryLogSuccess = optHistoryLogService.findByChannelOrderNumberAndOptNameAndSuccess(channelOrderNumber, opt);
......@@ -148,23 +110,17 @@ public class OperationAspect {
log.info("[operationAnnoAnnSave]该操作已经操作成功,无须重复操作,切面返回");
return ret;
}
}
}
// 代理执行方法
Object proceed = pjp.proceed();
// 获取方法返回 是否成功
if (expressionsuccSPEL != null) {
optHistoryLog.setOptResult(expressionsuccSPEL.getValue(proceed, Boolean.class));
}
// 获取方法详细信息
if (expressionMsgSPEL != null) {
optHistoryLog.setOptLogDetail(expressionMsgSPEL.getValue(proceed, String.class));
}
optHistoryLogService.save(optHistoryLog);
return proceed;
} catch (Throwable throwable) {
......@@ -172,4 +128,50 @@ public class OperationAspect {
return pjp.proceed();
}
}
private void getOptHistoryLogBean(OptEnumName opt, String channelOrderNumber, OptHistoryLog optHistoryLog, ClfOrderMapping orderMapping) {
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() + "_" + Application.getPrincipal().getUserInfo().getUsername());
optHistoryLog.setCreateTime(new Date());
}
private Expression getMegExpression(String optDetailSPEL) {
Expression expressionMsgSPEL = null;
if (StringUtils.isNotEmpty(optDetailSPEL)) {
try {
if (optDetailSPEL.startsWith(Constants.START_THIS)) {//判断是否是spel表达式
expressionMsgSPEL = new SpelExpressionParser().parseExpression(optDetailSPEL);
} else {
log.warn("[operationAnnoAnnSave]optDetail获取失败");
}
} catch (ExpressionException e) {
log.error("[operationAnnoAnnSave]key表达式“" + optDetailSPEL + "”错误:{}", e);
throw e;
}
}
return expressionMsgSPEL;
}
private Expression getIsSuccExpressionSPEL(String succSPEL) {
// 是否成功SPEL 表达式解析
Expression expressionsuccSPEL = null;
if (StringUtils.isNotEmpty(succSPEL)) {
try {
if (succSPEL.startsWith(Constants.START_THIS)) {//判断是否是spel表达式
expressionsuccSPEL = new SpelExpressionParser().parseExpression(succSPEL);
} else {
log.warn("[operationAnnoAnnSave]optResult获取失败");
}
} catch (ExpressionException e) {
log.error("[operationAnnoAnnSave]key表达式“" + succSPEL + "”错误:{}", e);
throw e;
}
}
return expressionsuccSPEL;
}
}
package cn.quantgroup.cashloanflowboss.core.constants;
/**
* @description:
* @author:tao
* @create: 2019-12-26 14:35
*/
public interface Constants {
String SUCCESS = "success";
String TOTAL_COUNT = "totalCount";
String TOTAL_AMOUNT = "totalAmount";
String DATA = "data";
String TOKEN = "token";
String TRUE = "true";
String START_THIS = "#this";
}
......@@ -12,7 +12,7 @@ import org.springframework.transaction.annotation.Transactional;
@Repository
public interface UserDetailRepository extends JpaRepository<UserDetail,Long>{
@Transactional
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "delete from user_detail where user_id = ?1", nativeQuery = true)
int deleteByUserId(Long userId);
......
......@@ -12,7 +12,7 @@ import org.springframework.transaction.annotation.Transactional;
@Repository
public interface UserExtInfoRepository extends JpaRepository<UserExtInfo,Long>{
@Transactional
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "delete from user_ext_info where user_id = ?1", nativeQuery = true)
void deleteByUserId(Long userId);
......
......@@ -30,7 +30,7 @@ public interface XYQBCenterService {
WaitingFundingCorpOperatePeople findWaitingFundingCorpOperatePeopleByLoanId(Long loanId);
@Transactional
@Transactional(rollbackOn = Exception.class)
void saveWaitingFundingCorpOperatePeople(WaitingFundingCorpOperatePeople waitingFundingCorpOperatePeople);
FundingCorpPolicy findFundingCorpPolicyByCorpPolicyId(Long corpPolicyId);
......
CREATE DATABASE IF NOT EXISTS cash_loan_flow_boss CHARACTER SET utf8 COLLATE utf8_general_ci;
use cash_loan_flow_boss;
CREATE TABLE IF NOT EXISTS `channel_conf` (
......
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