feat: 添加信贷客户家庭关系Mapper、Service接口
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
package com.ruoyi.ccdi.domain.excel;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||
import com.ruoyi.common.annotation.DictDropdown;
|
||||
import com.ruoyi.common.annotation.Required;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 信贷客户家庭关系Excel导入导出对象
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-11
|
||||
*/
|
||||
@Data
|
||||
public class CcdiCustFmyRelationExcel implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 信贷客户身份证号 */
|
||||
@ExcelProperty(value = "信贷客户身份证号*", index = 0)
|
||||
@ColumnWidth(20)
|
||||
@Required
|
||||
private String personId;
|
||||
|
||||
/** 关系类型 */
|
||||
@ExcelProperty(value = "关系类型*", index = 1)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_relation_type")
|
||||
@Required
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
@ExcelProperty(value = "关系人姓名*", index = 2)
|
||||
@ColumnWidth(15)
|
||||
@Required
|
||||
private String relationName;
|
||||
|
||||
/** 性别 */
|
||||
@ExcelProperty(value = "性别", index = 3)
|
||||
@ColumnWidth(10)
|
||||
@DictDropdown(dictType = "ccdi_indiv_gender")
|
||||
private String gender;
|
||||
|
||||
/** 出生日期 */
|
||||
@ExcelProperty(value = "出生日期", index = 4)
|
||||
@ColumnWidth(15)
|
||||
private Date birthDate;
|
||||
|
||||
/** 关系人证件类型 */
|
||||
@ExcelProperty(value = "关系人证件类型*", index = 5)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_certificate_type")
|
||||
@Required
|
||||
private String relationCertType;
|
||||
|
||||
/** 关系人证件号码 */
|
||||
@ExcelProperty(value = "关系人证件号码*", index = 6)
|
||||
@ColumnWidth(20)
|
||||
@Required
|
||||
private String relationCertNo;
|
||||
|
||||
/** 手机号码1 */
|
||||
@ExcelProperty(value = "手机号码1", index = 7)
|
||||
@ColumnWidth(15)
|
||||
private String mobilePhone1;
|
||||
|
||||
/** 手机号码2 */
|
||||
@ExcelProperty(value = "手机号码2", index = 8)
|
||||
@ColumnWidth(15)
|
||||
private String mobilePhone2;
|
||||
|
||||
/** 微信名称1 */
|
||||
@ExcelProperty(value = "微信名称1", index = 9)
|
||||
@ColumnWidth(15)
|
||||
private String wechatNo1;
|
||||
|
||||
/** 微信名称2 */
|
||||
@ExcelProperty(value = "微信名称2", index = 10)
|
||||
@ColumnWidth(15)
|
||||
private String wechatNo2;
|
||||
|
||||
/** 微信名称3 */
|
||||
@ExcelProperty(value = "微信名称3", index = 11)
|
||||
@ColumnWidth(15)
|
||||
private String wechatNo3;
|
||||
|
||||
/** 详细联系地址 */
|
||||
@ExcelProperty(value = "详细联系地址", index = 12)
|
||||
@ColumnWidth(30)
|
||||
private String contactAddress;
|
||||
|
||||
/** 关系详细描述 */
|
||||
@ExcelProperty(value = "关系详细描述", index = 13)
|
||||
@ColumnWidth(30)
|
||||
private String relationDesc;
|
||||
|
||||
/** 生效日期 */
|
||||
@ExcelProperty(value = "生效日期", index = 14)
|
||||
@ColumnWidth(15)
|
||||
private Date effectiveDate;
|
||||
|
||||
/** 失效日期 */
|
||||
@ExcelProperty(value = "失效日期", index = 15)
|
||||
@ColumnWidth(15)
|
||||
private Date invalidDate;
|
||||
|
||||
/** 备注 */
|
||||
@ExcelProperty(value = "备注", index = 16)
|
||||
@ColumnWidth(30)
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package com.ruoyi.ccdi.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.ccdi.domain.CcdiCustFmyRelation;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiCustFmyRelationQueryDTO;
|
||||
import com.ruoyi.ccdi.domain.vo.CcdiCustFmyRelationVO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 信贷客户家庭关系Mapper接口
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-11
|
||||
*/
|
||||
public interface CcdiCustFmyRelationMapper extends BaseMapper<CcdiCustFmyRelation> {
|
||||
|
||||
/**
|
||||
* 分页查询信贷客户家庭关系
|
||||
*
|
||||
* @param page 分页对象
|
||||
* @param query 查询条件
|
||||
* @return 信贷客户家庭关系VO列表
|
||||
*/
|
||||
Page<CcdiCustFmyRelationVO> selectRelationPage(Page<CcdiCustFmyRelationVO> page,
|
||||
@Param("query") CcdiCustFmyRelationQueryDTO query);
|
||||
|
||||
/**
|
||||
* 根据ID查询信贷客户家庭关系详情
|
||||
*
|
||||
* @param id 主键ID
|
||||
* @return 信贷客户家庭关系VO
|
||||
*/
|
||||
CcdiCustFmyRelationVO selectRelationById(@Param("id") Long id);
|
||||
|
||||
/**
|
||||
* 查询已存在的关系记录(用于导入校验)
|
||||
*
|
||||
* @param personId 信贷客户身份证号
|
||||
* @param relationType 关系类型
|
||||
* @param relationCertNo 关系人证件号码
|
||||
* @return 已存在的关系记录
|
||||
*/
|
||||
CcdiCustFmyRelation selectExistingRelations(@Param("personId") String personId,
|
||||
@Param("relationType") String relationType,
|
||||
@Param("relationCertNo") String relationCertNo);
|
||||
|
||||
/**
|
||||
* 批量插入信贷客户家庭关系
|
||||
*
|
||||
* @param relations 信贷客户家庭关系列表
|
||||
* @return 插入条数
|
||||
*/
|
||||
int insertBatch(@Param("relations") List<CcdiCustFmyRelation> relations);
|
||||
|
||||
/**
|
||||
* 根据证件号码查询关系数量
|
||||
*
|
||||
* @param relationCertNo 关系人证件号码
|
||||
* @return 关系数量
|
||||
*/
|
||||
int countByCertNo(@Param("relationCertNo") String relationCertNo);
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.ruoyi.ccdi.service;
|
||||
|
||||
import com.ruoyi.ccdi.domain.excel.CcdiCustFmyRelationExcel;
|
||||
import com.ruoyi.ccdi.domain.vo.CustFmyRelationImportFailureVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 信贷客户家庭关系导入Service接口
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-11
|
||||
*/
|
||||
public interface ICcdiCustFmyRelationImportService {
|
||||
|
||||
/**
|
||||
* 异步导入信贷客户家庭关系
|
||||
*
|
||||
* @param excels Excel数据列表
|
||||
* @param taskId 任务ID
|
||||
*/
|
||||
void importRelationsAsync(List<CcdiCustFmyRelationExcel> excels, String taskId);
|
||||
|
||||
/**
|
||||
* 校验单条数据
|
||||
*
|
||||
* @param excel Excel数据
|
||||
* @param rowNum 行号
|
||||
* @return 错误消息,为null表示校验通过
|
||||
*/
|
||||
String validateExcelRow(CcdiCustFmyRelationExcel excel, Integer rowNum);
|
||||
|
||||
/**
|
||||
* 获取导入失败记录
|
||||
*
|
||||
* @param taskId 任务ID
|
||||
* @return 失败记录列表
|
||||
*/
|
||||
List<CustFmyRelationImportFailureVO> getImportFailures(String taskId);
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
package com.ruoyi.ccdi.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiCustFmyRelationAddDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiCustFmyRelationEditDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiCustFmyRelationQueryDTO;
|
||||
import com.ruoyi.ccdi.domain.excel.CcdiCustFmyRelationExcel;
|
||||
import com.ruoyi.ccdi.domain.vo.CcdiCustFmyRelationVO;
|
||||
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 信贷客户家庭关系Service接口
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-11
|
||||
*/
|
||||
public interface ICcdiCustFmyRelationService {
|
||||
|
||||
/**
|
||||
* 分页查询信贷客户家庭关系
|
||||
*
|
||||
* @param query 查询条件
|
||||
* @param pageNum 页码
|
||||
* @param pageSize 每页条数
|
||||
* @return 分页结果
|
||||
*/
|
||||
Page<CcdiCustFmyRelationVO> selectRelationPage(CcdiCustFmyRelationQueryDTO query,
|
||||
Integer pageNum, Integer pageSize);
|
||||
|
||||
/**
|
||||
* 根据ID查询信贷客户家庭关系详情
|
||||
*
|
||||
* @param id 主键ID
|
||||
* @return 信贷客户家庭关系VO
|
||||
*/
|
||||
CcdiCustFmyRelationVO selectRelationById(Long id);
|
||||
|
||||
/**
|
||||
* 新增信贷客户家庭关系
|
||||
*
|
||||
* @param addDTO 新增DTO
|
||||
* @return 是否成功
|
||||
*/
|
||||
boolean insertRelation(CcdiCustFmyRelationAddDTO addDTO);
|
||||
|
||||
/**
|
||||
* 修改信贷客户家庭关系
|
||||
*
|
||||
* @param editDTO 编辑DTO
|
||||
* @return 是否成功
|
||||
*/
|
||||
boolean updateRelation(CcdiCustFmyRelationEditDTO editDTO);
|
||||
|
||||
/**
|
||||
* 删除信贷客户家庭关系
|
||||
*
|
||||
* @param ids 主键ID数组
|
||||
* @return 是否成功
|
||||
*/
|
||||
boolean deleteRelationByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 导出信贷客户家庭关系
|
||||
*
|
||||
* @param query 查询条件
|
||||
* @param response HTTP响应
|
||||
*/
|
||||
void exportRelations(CcdiCustFmyRelationQueryDTO query, HttpServletResponse response);
|
||||
|
||||
/**
|
||||
* 生成导入模板
|
||||
*
|
||||
* @param response HTTP响应
|
||||
*/
|
||||
void importTemplate(HttpServletResponse response);
|
||||
|
||||
/**
|
||||
* 批量导入信贷客户家庭关系
|
||||
*
|
||||
* @param excels Excel数据列表
|
||||
* @return 导入任务ID
|
||||
*/
|
||||
String importRelations(List<CcdiCustFmyRelationExcel> excels);
|
||||
|
||||
/**
|
||||
* 获取导入失败记录
|
||||
*
|
||||
* @param taskId 任务ID
|
||||
* @return 失败记录列表
|
||||
*/
|
||||
List<com.ruoyi.ccdi.domain.vo.CustFmyRelationImportFailureVO> getImportFailures(String taskId);
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
<?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.ruoyi.ccdi.mapper.CcdiCustFmyRelationMapper">
|
||||
|
||||
<resultMap id="CcdiCustFmyRelationVOResult" type="com.ruoyi.ccdi.domain.vo.CcdiCustFmyRelationVO">
|
||||
<id property="id" column="id"/>
|
||||
<result property="personId" column="person_id"/>
|
||||
<result property="relationType" column="relation_type"/>
|
||||
<result property="relationName" column="relation_name"/>
|
||||
<result property="gender" column="gender"/>
|
||||
<result property="birthDate" column="birth_date"/>
|
||||
<result property="relationCertType" column="relation_cert_type"/>
|
||||
<result property="relationCertNo" column="relation_cert_no"/>
|
||||
<result property="mobilePhone1" column="mobile_phone1"/>
|
||||
<result property="mobilePhone2" column="mobile_phone2"/>
|
||||
<result property="wechatNo1" column="wechat_no1"/>
|
||||
<result property="wechatNo2" column="wechat_no2"/>
|
||||
<result property="wechatNo3" column="wechat_no3"/>
|
||||
<result property="contactAddress" column="contact_address"/>
|
||||
<result property="relationDesc" column="relation_desc"/>
|
||||
<result property="effectiveDate" column="effective_date"/>
|
||||
<result property="invalidDate" column="invalid_date"/>
|
||||
<result property="status" column="status"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="dataSource" column="data_source"/>
|
||||
<result property="isEmpFamily" column="is_emp_family"/>
|
||||
<result property="isCustFamily" column="is_cust_family"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="createdBy" column="created_by"/>
|
||||
<result property="updatedBy" column="updated_by"/>
|
||||
</resultMap>
|
||||
|
||||
<!-- 分页查询信贷客户家庭关系 -->
|
||||
<select id="selectRelationPage" resultMap="CcdiCustFmyRelationVOResult">
|
||||
SELECT
|
||||
r.id, r.person_id, r.relation_type, r.relation_name,
|
||||
r.gender, r.birth_date, r.relation_cert_type, r.relation_cert_no,
|
||||
r.mobile_phone1, r.mobile_phone2, r.wechat_no1, r.wechat_no2, r.wechat_no3,
|
||||
r.contact_address, r.relation_desc, r.effective_date, r.invalid_date,
|
||||
r.status, r.remark, r.data_source, r.is_emp_family, r.is_cust_family,
|
||||
r.created_by, r.create_time, r.updated_by, r.update_time
|
||||
FROM ccdi_cust_fmy_relation r
|
||||
<where>
|
||||
r.is_cust_family = 1
|
||||
<if test="query.personId != null and query.personId != ''">
|
||||
AND r.person_id = #{query.personId}
|
||||
</if>
|
||||
<if test="query.relationType != null and query.relationType != ''">
|
||||
AND r.relation_type = #{query.relationType}
|
||||
</if>
|
||||
<if test="query.relationName != null and query.relationName != ''">
|
||||
AND r.relation_name LIKE CONCAT('%', #{query.relationName}, '%')
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY r.create_time DESC
|
||||
</select>
|
||||
|
||||
<!-- 根据ID查询详情 -->
|
||||
<select id="selectRelationById" resultMap="CcdiCustFmyRelationVOResult">
|
||||
SELECT
|
||||
r.id, r.person_id, r.relation_type, r.relation_name,
|
||||
r.gender, r.birth_date, r.relation_cert_type, r.relation_cert_no,
|
||||
r.mobile_phone1, r.mobile_phone2, r.wechat_no1, r.wechat_no2, r.wechat_no3,
|
||||
r.contact_address, r.relation_desc, r.effective_date, r.invalid_date,
|
||||
r.status, r.remark, r.data_source, r.is_emp_family, r.is_cust_family,
|
||||
r.created_by, r.create_time, r.updated_by, r.update_time
|
||||
FROM ccdi_cust_fmy_relation r
|
||||
WHERE r.id = #{id} AND r.is_cust_family = 1
|
||||
</select>
|
||||
|
||||
<!-- 查询已存在的关系(用于导入校验) -->
|
||||
<select id="selectExistingRelations" resultType="com.ruoyi.ccdi.domain.CcdiCustFmyRelation">
|
||||
SELECT *
|
||||
FROM ccdi_cust_fmy_relation
|
||||
WHERE is_cust_family = 1
|
||||
AND person_id = #{personId}
|
||||
AND relation_type = #{relationType}
|
||||
AND relation_cert_no = #{relationCertNo}
|
||||
AND status = 1
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<!-- 批量插入 -->
|
||||
<insert id="insertBatch" parameterType="java.util.List">
|
||||
INSERT INTO ccdi_cust_fmy_relation (
|
||||
person_id, relation_type, relation_name, gender, birth_date,
|
||||
relation_cert_type, relation_cert_no, mobile_phone1, mobile_phone2,
|
||||
wechat_no1, wechat_no2, wechat_no3, contact_address, relation_desc,
|
||||
status, effective_date, invalid_date, remark, data_source,
|
||||
is_emp_family, is_cust_family, created_by, create_time
|
||||
) VALUES
|
||||
<foreach collection="relations" item="item" separator=",">
|
||||
(
|
||||
#{item.personId}, #{item.relationType}, #{item.relationName},
|
||||
#{item.gender}, #{item.birthDate}, #{item.relationCertType},
|
||||
#{item.relationCertNo}, #{item.mobilePhone1}, #{item.mobilePhone2},
|
||||
#{item.wechatNo1}, #{item.wechatNo2}, #{item.wechatNo3},
|
||||
#{item.contactAddress}, #{item.relationDesc}, #{item.status},
|
||||
#{item.effectiveDate}, #{item.invalidDate}, #{item.remark},
|
||||
#{item.dataSource}, #{item.isEmpFamily}, #{item.isCustFamily},
|
||||
#{item.createdBy}, #{item.createTime}
|
||||
)
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
<!-- 根据证件号码查询关系数量 -->
|
||||
<select id="countByCertNo" resultType="int">
|
||||
SELECT COUNT(1)
|
||||
FROM ccdi_cust_fmy_relation
|
||||
WHERE is_cust_family = 1
|
||||
AND relation_cert_no = #{relationCertNo}
|
||||
AND status = 1
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user