分期商户和分期数据

This commit is contained in:
=.* 2024-06-14 15:29:24 +08:00
parent 228a4b755c
commit 3e904a292c
14 changed files with 688 additions and 0 deletions

View File

@ -0,0 +1,61 @@
package com.chushang.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chushang.common.core.web.AjaxResult;
import com.chushang.domin.dto.LoanApproval;
import com.chushang.domin.entity.LoanEntity;
import com.chushang.domin.query.LoanFormQuery;
import com.chushang.service.ILoanService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
@RestController
@RequestMapping("/loan")
public class LoanController {
@Autowired
private ILoanService iLoanService;
// /**
// * 提交表单数据
// */
// @PostMapping("/submit")
// public void submitFormData(@RequestBody @Validated LoanFormData formData) {
// iLoanService.submitFormData(formData);
// }
/**
* 查询表单
*/
@PostMapping("/find")
public Page<LoanEntity> queryLoan(@RequestBody LoanFormQuery query) {
return iLoanService.queryLoan(query);
}
/**
* 查询表单
*/
@PostMapping("/data")
public Page<LoanEntity> data(@RequestBody LoanFormQuery query) {
return iLoanService.queryData(query);
}
/**
* 审批
*/
@PostMapping("/approval")
public AjaxResult approval(@RequestBody @Validated LoanApproval approval) {
return AjaxResult.success(iLoanService.approval(approval));
}
}

View File

@ -0,0 +1,41 @@
package com.chushang.domin.dto;
import lombok.Data;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class LoanApproval implements Serializable {
/**
* 主键
*/
@NotNull(message = "id不能为空")
private Long id;
/**
* 跟进状态
*/
@NotNull(message = "审批状态不能为空")
@Range(max = 3, min = 2, message = "审批状态只能选择审批通过或审批拒绝")
private Integer status;
/**
* 放款金额
*/
@Digits(integer = 9, fraction = 2, message = "申请金额格式不正确")
@DecimalMin(value = "0.00", message = "申请金额不能是负数")
private BigDecimal loanAmount;
/**
* 拒绝原因
*/
@Size(max = 310, message = "房屋地址不能超过310个字符")
private String denialReason;
}

View File

@ -0,0 +1,62 @@
package com.chushang.domin.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
@NoArgsConstructor
public class LoanFormData implements Serializable {
/** 业务员id */
@NotNull(message = "业务员id不能为空")
private Long userId;
/** 渠道id */
@NotNull(message = "渠道id不能为空")
private Long channelId;
/** 渠道名称 */
@NotEmpty(message = "渠道名称不能为空")
@Size(max = 127, message = "渠道名称不能超过127个字符")
private String channelName;
/** 提交人姓名 */
@NotEmpty(message = "提交人姓名不能为空")
@Size(max = 127, message = "提交人姓名不能超过127个字符")
private String authorName;
/** 提交人联系方式 */
@NotEmpty(message = "提交人联系方式不能为空")
@Size(max = 127, message = "提交人联系方式不能超过127个字符")
private String authorPhone;
/** 客户姓名 */
@NotEmpty(message = "客户姓名不能为空")
@Size(max = 127, message = "客户姓名不能超过127个字符")
private String customerName;
/** 客户手机号 */
@NotEmpty(message = "客户手机号不能为空")
@Size(max = 63, message = "客户手机号不能超过63个字符")
private String customerPhone;
/** 申请金额 */
@Digits(integer = 9, fraction = 2, message = "申请金额格式不正确")
@DecimalMin(value = "0.00", message = "申请金额不能是负数")
@NotNull(message = "申请金额不能为空")
private BigDecimal applicationAmount;
/** 房屋地址 */
@NotEmpty(message = "房屋地址不能为空")
@Size(max = 310, message = "房屋地址不能超过310个字符")
private String houseAddress;
/** 房屋面积 */
@NotEmpty(message = "房屋面积不能为空")
@Size(max = 63, message = "房屋面积不能超过63个字符")
private String houseArea;
}

View File

@ -0,0 +1,79 @@
package com.chushang.domin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.chushang.common.mybatis.base.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
/**
* 借贷业务数据表 实体类
*
* @author mybatis-flex-helper automatic generation
* @since 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "loan_aduit")
@Builder
public class LoanAduitEntity extends BaseEntity {
/**
* 主键
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 贷款id
*/
@TableField(value = "load_id")
private Long loadId;
/**
* 跟进状态 1 待审核 2 审核成功 3 审核拒绝
*/
@TableField(value = "status")
private Integer status;
/**
* 备注
*/
@TableField(value = "remark")
private String remark;
/**
* 审批人id
*/
@TableField(value = "approver_id")
private Long approverId;
/**
* 审批人姓名
*/
@TableField(value = "approver_name")
private String approverName;
/**
* 审批时间
*/
@TableField(value = "approver_time")
private LocalDateTime approverTime;
/**
* 拒绝原因
*/
@TableField(value = "denial_reason")
private String denialReason;
}

View File

@ -0,0 +1,125 @@
package com.chushang.domin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.chushang.common.mybatis.base.BaseEntity;
import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 借贷业务数据表 实体类
*
* @author mybatis-flex-helper automatic generation
* @since 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "loan")
@Builder
public class LoanEntity extends BaseEntity {
/**
* 主键
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 用户id
*/
@TableField(value = "user_id")
private Long userId;
/**
* 渠道id
*/
@TableField(value = "dept_id")
private Long deptId;
/**
* 渠道名
*/
@TableField(value = "channel_name")
private String channelName;
/**
* 表单编号
*/
@TableField(value = "form_number")
private String formNumber;
/**
* 提交人姓名
*/
@TableField(value = "author_name")
private String authorName;
/**
* 提交人手机号
*/
@TableField(value = "author_phone")
private String authorPhone;
/**
* 提交时间
*/
@TableField(value = "submission_time")
private LocalDateTime submissionTime;
/**
* 客户姓名
*/
@TableField(value = "customer_name")
private String customerName;
/**
* 客户手机号
*/
@TableField(value = "customer_phone")
private String customerPhone;
/**
* 申请金额
*/
@TableField(value = "application_amount")
private BigDecimal applicationAmount;
/**
* 房屋地址
*/
@TableField(value = "house_address")
private String houseAddress;
/**
* 房屋面积
*/
@TableField(value = "house_area")
private String houseArea;
/**
* 跟进状态 1 待审核 2 审核成功 3 审核拒绝
*/
@TableField(value = "status")
private Integer status;
/**
* 放款金额
*/
@TableField(value = "loan_amount")
private BigDecimal loanAmount;
/**
* 拒绝原因
*/
@TableField(value = "denial_reason")
private String denialReason;
}

View File

@ -0,0 +1,51 @@
package com.chushang.domin.query;
import cn.hutool.core.date.DatePattern;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LoanFormQuery {
/** 编号 */
private String formNumber;
/** 时间区间 */
@JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
private List<LocalDateTime> submissionTimes;
/** 业务状态 */
private Integer status;
/** 提交人姓名/手机号 */
private String author;
/** 渠道名称 */
private String channelName;
/** 渠道ID */
private Long channelId;
/** 当前页 */
protected Integer page;
/** 每页显示条数 */
protected Integer limit;
public <R> Page<R> of() {
return Page.of(page, limit);
}
}

View File

@ -0,0 +1,42 @@
package com.chushang.domin.vo;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
@NoArgsConstructor
public class LoanData implements Serializable {
/**
* 渠道名
*/
private String channelName;
/**
* 提交人姓名
*/
private String authorName;
/**
* 提交人手机号
*/
private String authorPhone;
/**
* 总开通量
*/
private Integer totalOpenFlux;
/**
* 总放款金额
*/
private BigDecimal totalLoanAmount;
/**
* 总交易金额
*/
private BigDecimal totalTransactionAmount;
}

View File

@ -0,0 +1,49 @@
package com.chushang.domin.vo;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor
public class LoanVO implements Serializable {
/**
* 主键
*/
private Long id;
/**
* 渠道名
*/
private String channelName;
/**
* 提交人姓名
*/
private String authorName;
/**
* 提交人手机号
*/
private String authorPhone;
/**
* 总开通量
*/
private Integer totalOpenFlux;
/**
* 总房贷金额
*/
private BigDecimal totalLoanAmount;
/**
* 总交易金额
*/
private BigDecimal totalTransactionAmount;
}

View File

@ -0,0 +1,9 @@
package com.chushang.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.chushang.domin.entity.LoanAduitEntity;
public interface LoanAduitMapper extends BaseMapper<LoanAduitEntity> {
}

View File

@ -0,0 +1,15 @@
package com.chushang.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.chushang.domin.entity.LoanEntity;
import com.chushang.domin.query.LoanFormQuery;
import com.chushang.domin.vo.LoanVO;
import java.util.List;
public interface LoanMapper extends BaseMapper<LoanEntity> {
// List<LoanVO> queryDataList(LoanFormQuery loanFormQuery);
}

View File

@ -0,0 +1,15 @@
package com.chushang.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chushang.domin.dto.LoanApproval;
import com.chushang.domin.dto.LoanFormData;
import com.chushang.domin.entity.LoanAduitEntity;
import com.chushang.domin.entity.LoanEntity;
import com.chushang.domin.query.LoanFormQuery;
public interface ILoanAduitService {
void insertAduit(LoanAduitEntity loanAduitEntity);
}

View File

@ -0,0 +1,21 @@
package com.chushang.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chushang.domin.dto.LoanApproval;
import com.chushang.domin.dto.LoanFormData;
import com.chushang.domin.entity.LoanEntity;
import com.chushang.domin.query.LoanFormQuery;
import org.springframework.stereotype.Service;
public interface ILoanService {
void submitFormData(LoanFormData formData);
Page<LoanEntity> queryLoan(LoanFormQuery query);
Page<LoanEntity> queryData(LoanFormQuery query);
boolean approval(LoanApproval approval);
}

View File

@ -0,0 +1,19 @@
package com.chushang.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chushang.domin.entity.LoanAduitEntity;
import com.chushang.mapper.LoanAduitMapper;
import com.chushang.service.ILoanAduitService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class LoanAduitServiceImpl extends ServiceImpl<LoanAduitMapper, LoanAduitEntity> implements ILoanAduitService {
@Override
public void insertAduit(LoanAduitEntity loanAduitEntity) {
baseMapper.insert(loanAduitEntity);
}
}

View File

@ -0,0 +1,99 @@
package com.chushang.service.impl;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chushang.domin.dto.LoanApproval;
import com.chushang.domin.dto.LoanFormData;
import com.chushang.domin.entity.LoanAduitEntity;
import com.chushang.domin.entity.LoanEntity;
import com.chushang.domin.query.LoanFormQuery;
import com.chushang.mapper.LoanMapper;
import com.chushang.security.entity.po.SysDept;
import com.chushang.security.utils.SecurityUtils;
import com.chushang.service.ILoanAduitService;
import com.chushang.service.ILoanService;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class LoanServiceImpl extends ServiceImpl<LoanMapper, LoanEntity> implements ILoanService {
@Autowired
ILoanAduitService iLoanAduitService;
@Override
public void submitFormData(LoanFormData formData) {
}
@Override
public Page<LoanEntity> queryLoan(LoanFormQuery query) {
QueryWrapper<LoanEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(Strings.isNotEmpty(query.getAuthor()), "author_name", query.getAuthor());
queryWrapper.eq(!Objects.isNull(query.getStatus()), "status", query.getStatus());
queryWrapper.eq(Strings.isNotEmpty(query.getChannelName()), "channel_name", query.getChannelName());
queryWrapper.eq(Strings.isNotEmpty(query.getFormNumber()), "form_number", query.getFormNumber());
if (!Objects.isNull(query.getSubmissionTimes()) && query.getSubmissionTimes().size() > 1) {
queryWrapper.between("submission_time", query.getSubmissionTimes().get(0), query.getSubmissionTimes().get(1));
}
return baseMapper.selectPage(query.of(), queryWrapper);
}
@Override
public Page<LoanEntity> queryData(LoanFormQuery query) {
return null;
}
@Override
@Transactional
public boolean approval(LoanApproval approval) {
boolean flag = false;
if (approval.getStatus().equals(3) && StrUtil.isEmpty(approval.getDenialReason())) {
Assert.isTrue(false, "审批拒绝请注明原因");
} else if (approval.getStatus() == 2 && approval.getLoanAmount() == null) {
Assert.isTrue(false, "审批通过请填写通过额度");
}
LoanEntity loan = baseMapper.selectById(approval.getId());
Assert.isTrue(loan != null && loan.getStatus() == 1, "表单不存在或已经审批过");
loan.setDenialReason(approval.getDenialReason());
loan.setStatus(approval.getStatus());
loan.setLoanAmount(approval.getLoanAmount());
LoanAduitEntity loanAduitEntity = new LoanAduitEntity();
loanAduitEntity.setStatus(approval.getStatus());
loanAduitEntity.setLoadId(loan.getId());
loanAduitEntity.setApproverId(SecurityUtils.getUserId());
loanAduitEntity.setApproverName(SecurityUtils.getUsername());
loanAduitEntity.setDenialReason(approval.getDenialReason());
try {
iLoanAduitService.insertAduit(loanAduitEntity);
baseMapper.updateById(loan);
flag = true;
} catch (Exception e) {
log.error(e.getMessage());
flag = false;
}
return flag;
}
}