牧场授信管理(自用记录)

一、项目结构

二、常用类

1、上传封装类(不用request,封装成一个对象)

上传类中的身份证正反面等信息做成list附件

@Data
public class FarmCreditAddDto {
    /**
     * 授信类型
     */
    @TableField(value = "credit_apply_type")
    @ApiModelProperty(value = "授信类型")
    private String creditApplyType;
    /**
     * 牧场企业编号
     */
    @TableField(value = "company_code")
    @ApiModelProperty(value = "牧场企业编号")
    private String companyCode;
    /**
     * 牧场企业名
     */
    @TableField(value = "company_name")
    @ApiModelProperty(value = "牧场企业名")
    private String companyName;
    /**
     * 资金方编号
     */
    @TableField(value = "funder_code")
    @ApiModelProperty(value = "资金方编号")
    private String funderCode;
    /**
     * 资金方名(开户银行)
     */
    @TableField(value = "funder_name")
    @ApiModelProperty(value = "资金方名")
    private String funderName;
    /**
     * 申请说明
     */
    @TableField(value = "remark")
    @ApiModelProperty(value = "申请说明")
    private String remark;
    /**
     * 申请额度
     */
    @TableField(value = "apply_amount")
    @ApiModelProperty(value = "申请额度")
    private BigDecimal applyAmount;
    /**
     * 授信申请日期
     */
    @TableField(value = "apply_date")
    @ApiModelProperty(value = "授信申请日期")
    private String applyDate;
    /**
     * 附件信息
     */
    private List<Attachment> attachments;
}

2、查询封装类

@Data
public class FarmCreditQueryDto {
    /**
     * 牧企名
     */
    String companyName;
    /**
     * 资金方名
     */
    String funderName;
    /**
     * 授信状态:00-拒绝,01-已授信,02-授信中,03-已过期
     */
    String creditStatus;
    private Integer pageNo;
    private Integer pageSize;
}

3、审核封装类

@Data
public class FarmCreditAuditDto {
    /**
     * 审批角色:01-系统运营,02-牧企,03-资金方
     */
    private String role;
    /**
     * 业务编号
     */
    @NotBlank(message = "业务编号不能为空!")
    private String bizNo;
    /**
     * 授信金额
     */
    private BigDecimal creditAmount;
    /**
     * 授信开始日期
     */
    private String beginDate;
    /**
     * 授信结束日期
     */
    private String endDate;
    /**
     * 审批结果:1-通过,0-拒绝
     */
    private String approveResult;

}

4、返回响应封装类

@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel(value = "授信申请信息返回")
//继承企业信息类
public class FarmCreditVO extends CompanyInfo {
    /**
     * 此处省略,和FarmCredit类一致字段
     */
    /**
     * 附件信息
     */
    private List<Attachment> attachments;
}

5、常用字段

@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper=false)
@TableName("farm_credit_apply")
@ApiModel(value = "farm_credit_apply对象", description = "farm_credit_apply")
public class FarmCredit implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @TableId(value = "id", type= IdType.AUTO)
    @ApiModelProperty(value = "")
    private Long id;

   ……

    private String businessRemark;
    @TableField(value = "create_user_id")
    @ApiModelProperty(value = "创建人账号")
    private String createUserId;
    @TableField(value = "create_user")
    @ApiModelProperty(value = "创建人名称")
    private String createUser;
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    @TableField(value = "update_user_id")
    @ApiModelProperty(value = "更新人账号")
    private String updateUserId;
    @TableField(value = "update_user")
    @ApiModelProperty(value = "更新人名称")
    private String updateUser;
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "更新时间")
    private Date updateTime;
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "最后一次更新时间")
    private Date lastUpdateTime;
}

三、具体实现

1、列表查询

controller:

@Api(tags = "牧场企业授信")
@RestController
@RequestMapping("/system/company/credit")
@Slf4j
public class FarmCreditController {
    @Autowired
    private IFarmCreditService farmCreditService;

    @ApiOperation(value = "牧场企业授信分页列表查询")
    @GetMapping("/list")
    public ResponseVo<IPage<FarmCreditVO>> pageList(FarmCreditQueryDto queryDto) {
        IPage<FarmCreditVO> pageList = farmCreditService.queryPageList(queryDto);
        return ResponseVo.ok(pageList);
    }
}

serviceImpl:

@Service
public class FarmCreditServiceImpl extends ServiceImpl<FarmCreditMapper, FarmCredit> implements IFarmCreditService {
    @Autowired
    private FarmCreditMapper farmCreditMapper;
    @Autowired
    private AttachmentMapper attachmentMapper;
    @Autowired
    private CompanyInfoMapper companyInfoMapper;

    /**
     * 牧场授信列表
     * @param queryDto
     * @return
     */
    @Override
    public IPage<FarmCreditVO> queryPageList(FarmCreditQueryDto queryDto) {
        Page<FarmCreditVO> page = new Page(queryDto.getPageNo(), queryDto.getPageSize());
        return farmCreditMapper.queryPageList(page,queryDto);
    }
}

mapper:

@Mapper
public interface FarmCreditMapper extends BaseMapper<FarmCredit> {

    IPage<FarmCreditVO> queryPageList(@Param("param") Page<FarmCreditVO> page, @Param("dto") FarmCreditQueryDto queryDto);
}

xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cib.fintech.cibiot.livestock.finance.modules.farmcredit.dao.mapper.FarmCreditMapper">
    <!--牧场授信列表-->
    <select id="queryPageList" resultType="com.cib.fintech.cibiot.livestock.finance.modules.farmcredit.vo.FarmCreditVO">
        select * from farm_credit_apply
        <where>
            <if test="dto.companyName !=null and dto.companyName !=''">
                and company_name like concat('%',#{dto.companyName},'%')
            </if>
            <if test="dto.funderName !=null and dto.funderName !=''">
                and funder_name like concat('%',#{dto.funderName},'%')
            </if>
            <if test="dto.creditStatus !=null and dto.creditStatus !=''">
                and credit_status =#{dto.creditStatus}
            </if>
        </where>
        order by create_time desc
    </select>
</mapper>

2、查看详细

contoller:

  @ApiOperation(value = "查看详细授信信息")
    @GetMapping("/detail")
    public ResponseVo<FarmCreditVO> detail(@RequestParam(name = "creditApplyNo", required = true) String creditApplyNo,
                                           @RequestParam(name = "companyName", required = true) String companyName) {
        FarmCreditVO detailVo = farmCreditService.taskDetail(creditApplyNo,companyName);
        return ResponseVo.ok(detailVo);
    }

serviceImpl:

    /**
     * 牧场授信详情
     * @param creditNo,companyCode
     * @return
     */
    @Override
    public FarmCreditVO taskDetail(String creditNo,String companyName) {
        FarmCredit farmCredit = farmCreditMapper.selectOne(Wrappers.<FarmCredit>lambdaQuery()
                .eq(FarmCredit::getCreditApplyNo, creditNo));
        FarmCreditVO farmCreditVO = BeanUtil.copyProperties(farmCredit, FarmCreditVO.class);
        //获取审批状态
        farmCreditVO.setFarmAuditStatus(farmCredit.getAuditStatus());
        // 附件
        List<Attachment> attachments = attachmentMapper.selectList(Wrappers.<Attachment>lambdaQuery().eq(Attachment::getBizNo, farmCredit.getCreditApplyNo()));
        farmCreditVO.setAttachments(attachments);
        attachmentShow(attachments);
        //通过companyCode查询企业详细信息
        CompanyInfoEntity companyInfo = companyInfoEntityMapper.selectOne(Wrappers.<CompanyInfoEntity>lambdaQuery()
              .eq(CompanyInfoEntity::getCompanyName,companyName));
        //信息保存到farmCreditVO中
        farmCreditVO.setCompanyName(companyInfo.getCompanyName());
        farmCreditVO.setUnifiedSocialCreditCode(companyInfo.getUnifiedSocialCreditCode());
        farmCreditVO.setRegisterCapital(companyInfo.getRegisterCapital());
        farmCreditVO.setCompanyAddress(companyInfo.getCompanyAddress());
        farmCreditVO.setRegisterTime(companyInfo.getRegisterTime());
        farmCreditVO.setBusinessTerm(companyInfo.getBusinessTerm());
        farmCreditVO.setLegalPerson(companyInfo.getLegalPerson());
        farmCreditVO.setLegalIdCard(companyInfo.getLegalIdCard());
        farmCreditVO.setBusinessScope(companyInfo.getBusinessScope());
        return farmCreditVO;
    }
    //返回附件列表
    private List<Attachment> attachmentShow(List<Attachment> attachments) {
        return attachments;
    }

3、增加申请

contoller:

  @ApiOperation(value = "新增授信申请")
    @PostMapping("/add")
    public ResponseVo<String> apply(@RequestBody @Valid FarmCreditAddDto addDto) {
        return farmCreditService.apply(addDto);
    }

serviceImpl:

    /**
     * 牧场授信申请
     * @param addDto
     * @return
     */
    @Override
    public ResponseVo<String> apply(FarmCreditAddDto addDto) {
        FarmCredit farmCredit = BeanUtil.copyProperties(addDto, FarmCredit.class);
        // 授信申请编号
        Integer maxId = farmCreditMapper.selectMaxId();
        farmCredit.setCreditApplyNo("mqsx" + Calendar.getInstance().get(Calendar.YEAR) + (maxId == null ? "000001" : String.format("%06d", maxId + 1)));
        // 授信状态:2授信中
        farmCredit.setCreditStatus("2");
        // 审批状态:0待审批
        farmCredit.setAuditStatus("0");
        farmCredit.setApplyDate(DateUtil.format(new Date(), "yyyy-MM-dd"));
        // 创建人、创建日期
        farmCredit.setCreateUserId(JwtUtil.getUserId());
        farmCredit.setCreateUser(JwtUtil.getUsername());
        farmCredit.setCreateTime(new Date());
        this.save(farmCredit);
        // 保存附件
        List<Attachment> attachments = addDto.getAttachments();
        for (Attachment attachment : attachments) {
            attachment.setBizNo(farmCredit.getCreditApplyNo());
            attachment.setCreateTime(new Date());
            attachmentMapper.insert(attachment);
        }
        //新增授信待办记录
        BusinessHandleEntity applyHandle=new BusinessHandleEntity();
        applyHandle.setBusinessNo(farmCredit.getCreditApplyNo());
        applyHandle.setBusinessType("3");//业务类型 1-牧企认证,2-农户认证,3-牧场授信,4-农户授信,5-领养申请
        applyHandle.setAuditStatus("0"); // 授信状态:待审批
        applyHandle.setHandleUsageType("1"); // 系统运营
        applyHandle.setApplicantId(JwtUtil.getUserId());
        applyHandle.setApplicant(JwtUtil.getUsername());
        applyHandle.setCreateById(JwtUtil.getUserId());
        applyHandle.setCreateBy(JwtUtil.getUsername());
        applyHandle.setCreateTime(new Date());
        businessHandleMapper.insert(applyHandle);
        return ResponseVo.ok("提交成功!");
    }

mapper:

Integer selectMaxId();

xml:

<!--获取授信id-->
    <select id="selectMaxId" resultType="java.lang.Integer">
        select max(id) from farm_credit_apply
    </select>

4、申请审批

contoller:

@ApiOperation(value = "授信审核拒绝/通过")
    @PostMapping("/audit")
    public ResponseVo<String> audit(@Valid @RequestBody FarmCreditAuditDto auditDto){
        return farmCreditService.audit(auditDto);
    }

serviceImpl:

     /**
     * 牧场授信审核(通过/拒绝)
     * @param auditDto
     * @return
     */
    @Override
    public ResponseVo<String> audit(FarmCreditAuditDto auditDto) {
        FarmCredit farmCredit = farmCreditMapper.selectOne(Wrappers.<FarmCredit>lambdaQuery()
                .eq(FarmCredit::getCreditApplyNo, auditDto.getBizNo()));
        //准备记录到任务表中
        BusinessHandleRecordEntity auditHandle=new BusinessHandleRecordEntity();
        auditHandle.setBusinessNo(farmCredit.getCreditApplyNo());
        auditHandle.setBusinessType("3");//业务类型 1-牧企认证,2-农户认证,3-牧场授信,4-农户授信,5-领养申请
        auditHandle.setApplicantId(JwtUtil.getUserId());
        auditHandle.setApplicant(JwtUtil.getUsername());
        auditHandle.setCreateById(JwtUtil.getUserId());
        auditHandle.setCreate_by(JwtUtil.getUsername());
        auditHandle.setCreateTime(new Date());
        BeanUtils.copyProperties(farmCredit,auditHandle);
        //审批通过
            if (Objects.equals(auditDto.getApproveResult(), "1")) {
                BeanUtil.copyProperties(auditDto, farmCredit);
                farmCredit.setUsedAmount(BigDecimal.ZERO);
                farmCredit.setUsableAmount(auditDto.getCreditAmount());
                farmCredit.setCreditStatus("1"); // 授信状态:1已授信
                farmCredit.setAuditStatus("3"); // 审批状态:3资金方通过
                //更新任务状态
                auditHandle.setAuditStatus("2");//审核状态: 0:待审批 2:审批通过 1:审批未通过 99:未提交
            } else {
                // 审批拒绝
                farmCredit.setCreditStatus("0"); // 授信状态:0拒绝
                farmCredit.setAuditStatus("0"); //  审批状态:0待审批
                //更新任务状态
                auditHandle.setAuditStatus("1");//审核状态: 0:待审批 2:审批通过 1:审批未通过 99:未提交
            }
        // 更新授信信息
        farmCreditMapper.updateById(farmCredit);
        //更新任务状态
        businessHandleRecordMapper.insert(auditHandle);
        return ResponseVo.ok("审批完成!");
    }

5、查找相关联的资金方

contoller:

 @ApiOperation(value = "授信审核-授信申请-获得资金方")
 @GetMapping("/selectFunder")
 public ResponseVo<List<String>> selectFunder(@RequestParam(name="orgId")Long OrgId){
     return ResponseVo.ok(farmCreditService.getFunderByOrgId(OrgId));
 }

serviceImpl:

/**
 * 获得相关资金方
 * @param orgId
 * @return
 */
    @Override
    public List<String> getFunderByOrgId(Long orgId) {
        List<String>bankNamelist=new ArrayList<String>();
        //通过org_id得到company_id
        Long companyId=findByOrgMapper.findCompanyIdByOrgId(orgId);
        //通过company_id得到相关的bank_id
        List<Long> bankIdList=findByOrgMapper.findBankIdByOrgId(companyId);
        //通过相关资金方id获得资金方名
        for (Long bankId : bankIdList) {
            String name=findByOrgMapper.findBankName(bankId);
            bankNamelist.add(name);
        }
        //返回资金方名
        return bankNamelist;
    }

mapper:(新建,因为外联数据库表,使用DS)


/**
 * 外接,获取和牧场相关联的资金方(银行)的编号和名称
 */
@Mapper
@DS(value = "systemManagement")
public interface FindByOrgMapper extends BaseMapper<FarmCredit> {
    List<Long> findBankIdByOrgId(Long companyId);

    String findBankName(Long bankId);

    Long findCompanyIdByOrgId(Long companyId);
}

xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cib.fintech.cibiot.livestock.finance.modules.farmcredit.dao.mapper.FindByOrgMapper">
  <!--获取和牧场相关联的资金方(银行)的名称-->
    <!--获得银行id-->
    <select id="findCompanyIdByOrgId" resultType="java.lang.Long" parameterType="java.lang.Long">
        select detail_id from organization_tree
        <where>
            <if test="orgId != null and orgId !=''">
                id=#{orgId}
            </if>
        </where>
    </select>
    <!--获得相关资金方id-->
    <select id="findBankIdByOrgId" resultType="java.lang.Long" parameterType="java.lang.String">
        select bank_id from bank_company_cooperation
        <where>
            <if test="companyId != null and companyId !=''">
                company_id=#{companyId}
            </if>
        </where>
    </select>
    <!--获得资金方名-->
    <select id="findBankName" resultType="java.lang.String" parameterType="java.lang.Long">
        select bank_name from bank_info
        <where>
            <if test="bankId != null and bankId !=''">
                id=#{bankId}
            </if>
        </where>
    </select>

</mapper>

6、通过代办记录id查询相关信息

controller:

 @ApiOperation(value = "审核时查看详细授信信息")
    @GetMapping("/auditDetail")
    public ResponseVo<FarmCreditVO> auditDetail(@RequestParam(name = "id", required = true)Long id) {
        FarmCreditVO detailVo = farmCreditService.auditDetail(id);
        return ResponseVo.ok(detailVo);
    }

serviceimpl:

 /**
     * 牧场授信详情
     * @param id
     * @return
     */
    @Override
    public FarmCreditVO auditDetail(Long id) {
        String creditApplyNo=farmCreditMapper.selectCreditApplyNo(id);
        FarmCredit farmCredit = farmCreditMapper.selectOne(Wrappers.<FarmCredit>lambdaQuery()
                .eq(FarmCredit::getCreditApplyNo,creditApplyNo));
        FarmCreditVO farmCreditVO = BeanUtil.copyProperties(farmCredit, FarmCreditVO.class);
        //获取审批状态
        farmCreditVO.setFarmAuditStatus(farmCredit.getAuditStatus());
        // 附件
        List<Attachment> attachments = attachmentMapper.selectList(Wrappers.<Attachment>lambdaQuery().eq(Attachment::getBizNo, farmCredit.getCreditApplyNo()));
        farmCreditVO.setAttachments(attachments);
        attachmentShow(attachments);
        //通过companyName查询企业详细信息
        CompanyInfoEntity companyInfo = companyInfoEntityMapper.selectOne(Wrappers.<CompanyInfoEntity>lambdaQuery()
                .eq(CompanyInfoEntity::getCompanyName,farmCredit.getCompanyName()));
        //获得资金方id
        String funderCode=getFunderCode(farmCreditVO.getFunderName());
        farmCreditVO.setFunderCode(funderCode);
        //信息保存到farmCreditVO中
        BeanUtils.copyProperties(companyInfo,farmCreditVO);
        return farmCreditVO;
    }

mapper:

@Mapper
public interface FarmCreditMapper extends BaseMapper<FarmCredit> {

    IPage<FarmCreditVO> queryPageList(@Param("param") Page<FarmCreditVO> page, @Param("dto") FarmCreditQueryDto queryDto);

    Integer selectMaxId();

    String selectCreditApplyNo(Long id);
}

xml:

<select id="selectCreditApplyNo" resultType="java.lang.String" parameterType="java.lang.Long">
        select business_no from business_handle where id=#{id}
    </select>

四、远程:

1、每个bootstrap.yml里的discrovey添加group方便nacos查询

例如:

nacos查询网址:nacos的ip:port/nacos

 2、frps:.ini文件中本地port改成gateway的port。cmd启动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值