中介黑名单更新
This commit is contained in:
@@ -35,19 +35,6 @@ public class CcdiEnumController {
|
||||
return AjaxResult.success(options);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取人员子类型选项
|
||||
*/
|
||||
@Operation(summary = "获取人员子类型选项")
|
||||
@GetMapping("/indivSubType")
|
||||
public AjaxResult getIndivSubTypeOptions() {
|
||||
List<EnumOptionVO> options = new ArrayList<>();
|
||||
for (IndivSubType type : IndivSubType.values()) {
|
||||
options.add(new EnumOptionVO(type.getCode(), type.getDesc()));
|
||||
}
|
||||
return AjaxResult.success(options);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取性别选项
|
||||
*/
|
||||
|
||||
@@ -66,9 +66,6 @@ public class CcdiBizIntermediary implements Serializable {
|
||||
/** 关联人员ID */
|
||||
private String relatedNumId;
|
||||
|
||||
/** 关联关系 */
|
||||
private String relationTypeField;
|
||||
|
||||
/** 数据来源,MANUAL:手动录入, SYSTEM:系统同步, IMPORT:批量导入, API:接口获取 */
|
||||
private String dataSource;
|
||||
|
||||
|
||||
@@ -32,9 +32,6 @@ public class CcdiIntermediaryPersonAddDTO implements Serializable {
|
||||
@Schema(description = "人员子类型")
|
||||
private String personSubType;
|
||||
|
||||
@Schema(description = "关系类型")
|
||||
private String relationType;
|
||||
|
||||
@Schema(description = "性别")
|
||||
private String gender;
|
||||
|
||||
@@ -76,7 +73,8 @@ public class CcdiIntermediaryPersonAddDTO implements Serializable {
|
||||
|
||||
@Schema(description = "关联关系")
|
||||
@Size(max = 50, message = "关联关系长度不能超过50个字符")
|
||||
private String relation;
|
||||
private String relationType;
|
||||
|
||||
|
||||
@Schema(description = "备注")
|
||||
@Size(max = 500, message = "备注长度不能超过500个字符")
|
||||
|
||||
@@ -36,9 +36,6 @@ public class CcdiIntermediaryPersonEditDTO implements Serializable {
|
||||
@Schema(description = "人员子类型")
|
||||
private String personSubType;
|
||||
|
||||
@Schema(description = "关系类型")
|
||||
private String relationType;
|
||||
|
||||
@Schema(description = "性别")
|
||||
private String gender;
|
||||
|
||||
@@ -79,7 +76,7 @@ public class CcdiIntermediaryPersonEditDTO implements Serializable {
|
||||
|
||||
@Schema(description = "关联关系")
|
||||
@Size(max = 50, message = "关联关系长度不能超过50个字符")
|
||||
private String relation;
|
||||
private String relationType;
|
||||
|
||||
@Schema(description = "备注")
|
||||
@Size(max = 500, message = "备注长度不能超过500个字符")
|
||||
|
||||
@@ -22,19 +22,19 @@ public class CcdiIntermediaryEntityExcel implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 机构名称 */
|
||||
@ExcelProperty(value = "机构名称", index = 0)
|
||||
@ExcelProperty(value = "机构名称*", index = 0)
|
||||
@ColumnWidth(30)
|
||||
private String enterpriseName;
|
||||
|
||||
/** 统一社会信用代码 */
|
||||
@ExcelProperty(value = "统一社会信用代码", index = 1)
|
||||
@ExcelProperty(value = "统一社会信用代码*", index = 1)
|
||||
@ColumnWidth(20)
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 主体类型 */
|
||||
@ExcelProperty(value = "主体类型", index = 2)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_enterprise_type")
|
||||
@DictDropdown(dictType = "ccdi_entity_type")
|
||||
private String enterpriseType;
|
||||
|
||||
/** 企业性质 */
|
||||
@@ -71,7 +71,7 @@ public class CcdiIntermediaryEntityExcel implements Serializable {
|
||||
/** 法定代表人证件类型 */
|
||||
@ExcelProperty(value = "法定代表人证件类型", index = 9)
|
||||
@ColumnWidth(20)
|
||||
@DictDropdown(dictType = "ccdi_id_type")
|
||||
@DictDropdown(dictType = "ccdi_certificate_type")
|
||||
private String legalCertType;
|
||||
|
||||
/** 法定代表人证件号码 */
|
||||
|
||||
@@ -21,7 +21,7 @@ public class CcdiIntermediaryPersonExcel implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 姓名 */
|
||||
@ExcelProperty(value = "姓名", index = 0)
|
||||
@ExcelProperty(value = "姓名*", index = 0)
|
||||
@ColumnWidth(15)
|
||||
private String name;
|
||||
|
||||
@@ -34,75 +34,68 @@ public class CcdiIntermediaryPersonExcel implements Serializable {
|
||||
/** 人员子类型 */
|
||||
@ExcelProperty(value = "人员子类型", index = 2)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_person_sub_type")
|
||||
private String personSubType;
|
||||
|
||||
/** 关系类型 */
|
||||
@ExcelProperty(value = "关系类型", index = 3)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_relation_type")
|
||||
private String relationType;
|
||||
|
||||
/** 性别 */
|
||||
@ExcelProperty(value = "性别", index = 4)
|
||||
@ExcelProperty(value = "性别", index = 3)
|
||||
@ColumnWidth(10)
|
||||
@DictDropdown(dictType = "sys_user_sex")
|
||||
@DictDropdown(dictType = "ccdi_indiv_gender")
|
||||
private String gender;
|
||||
|
||||
/** 证件类型 */
|
||||
@ExcelProperty(value = "证件类型", index = 5)
|
||||
@ExcelProperty(value = "证件类型", index = 4)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_id_type")
|
||||
@DictDropdown(dictType = "ccdi_certificate_type")
|
||||
private String idType;
|
||||
|
||||
/** 证件号码 */
|
||||
@ExcelProperty(value = "证件号码", index = 6)
|
||||
@ExcelProperty(value = "证件号码*", index = 5)
|
||||
@ColumnWidth(20)
|
||||
private String personId;
|
||||
|
||||
/** 手机号码 */
|
||||
@ExcelProperty(value = "手机号码", index = 7)
|
||||
@ExcelProperty(value = "手机号码", index = 6)
|
||||
@ColumnWidth(15)
|
||||
private String mobile;
|
||||
|
||||
/** 微信号 */
|
||||
@ExcelProperty(value = "微信号", index = 8)
|
||||
@ExcelProperty(value = "微信号", index = 7)
|
||||
@ColumnWidth(15)
|
||||
private String wechatNo;
|
||||
|
||||
/** 联系地址 */
|
||||
@ExcelProperty(value = "联系地址", index = 9)
|
||||
@ExcelProperty(value = "联系地址", index = 8)
|
||||
@ColumnWidth(30)
|
||||
private String contactAddress;
|
||||
|
||||
/** 所在公司 */
|
||||
@ExcelProperty(value = "所在公司", index = 10)
|
||||
@ExcelProperty(value = "所在公司", index = 9)
|
||||
@ColumnWidth(20)
|
||||
private String company;
|
||||
|
||||
/** 企业统一信用码 */
|
||||
@ExcelProperty(value = "企业统一信用码", index = 11)
|
||||
@ExcelProperty(value = "企业统一信用码", index = 10)
|
||||
@ColumnWidth(20)
|
||||
private String socialCreditCode;
|
||||
|
||||
/** 职位 */
|
||||
@ExcelProperty(value = "职位", index = 12)
|
||||
@ExcelProperty(value = "职位", index = 11)
|
||||
@ColumnWidth(15)
|
||||
private String position;
|
||||
|
||||
/** 关联人员ID */
|
||||
@ExcelProperty(value = "关联人员ID", index = 13)
|
||||
@ExcelProperty(value = "关联人员ID", index = 12)
|
||||
@ColumnWidth(15)
|
||||
private String relatedNumId;
|
||||
|
||||
/** 关联关系 */
|
||||
@ExcelProperty(value = "关联关系", index = 14)
|
||||
/** 关系类型 */
|
||||
@ExcelProperty(value = "关系类型", index = 13)
|
||||
@ColumnWidth(15)
|
||||
@DictDropdown(dictType = "ccdi_relation")
|
||||
private String relation;
|
||||
@DictDropdown(dictType = "ccdi_relation_type")
|
||||
private String relationType;
|
||||
|
||||
/** 备注 */
|
||||
@ExcelProperty(value = "备注", index = 15)
|
||||
@ExcelProperty(value = "备注", index = 14)
|
||||
@ColumnWidth(30)
|
||||
private String remark;
|
||||
}
|
||||
|
||||
@@ -21,9 +21,15 @@ public class CcdiIntermediaryEntityDetailVO implements Serializable {
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "业务ID")
|
||||
private String bizId;
|
||||
|
||||
@Schema(description = "统一社会信用代码")
|
||||
private String socialCreditCode;
|
||||
|
||||
@Schema(description = "中介类型(1=个人, 2=实体)")
|
||||
private String intermediaryType;
|
||||
|
||||
@Schema(description = "企业名称")
|
||||
private String enterpriseName;
|
||||
|
||||
|
||||
@@ -24,6 +24,9 @@ public class CcdiIntermediaryPersonDetailVO implements Serializable {
|
||||
@Schema(description = "人员ID")
|
||||
private String bizId;
|
||||
|
||||
@Schema(description = "中介类型(1=个人, 2=实体)")
|
||||
private String intermediaryType;
|
||||
|
||||
@Schema(description = "姓名")
|
||||
private String name;
|
||||
|
||||
@@ -54,6 +57,9 @@ public class CcdiIntermediaryPersonDetailVO implements Serializable {
|
||||
@Schema(description = "所在公司")
|
||||
private String company;
|
||||
|
||||
@Schema(description = "企业统一信用码")
|
||||
private String socialCreditCode;
|
||||
|
||||
@Schema(description = "职位")
|
||||
private String position;
|
||||
|
||||
|
||||
@@ -45,4 +45,8 @@ public class CcdiIntermediaryVO implements Serializable {
|
||||
@Schema(description = "创建时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
|
||||
@Schema(description = "修改时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date updateTime;
|
||||
}
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
package com.ruoyi.ccdi.enums;
|
||||
|
||||
|
||||
/**
|
||||
* 人员子类型枚举
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public enum IndivSubType {
|
||||
|
||||
/** 本人 */
|
||||
SELF("本人", "本人"),
|
||||
|
||||
/** 配偶 */
|
||||
SPOUSE("配偶", "配偶"),
|
||||
|
||||
/** 父亲 */
|
||||
FATHER("父亲", "父亲"),
|
||||
|
||||
/** 母亲 */
|
||||
MOTHER("母亲", "母亲"),
|
||||
|
||||
/** 兄弟 */
|
||||
BROTHER("兄弟", "兄弟"),
|
||||
|
||||
/** 姐妹 */
|
||||
SISTER("姐妹", "姐妹"),
|
||||
|
||||
/** 子女 */
|
||||
CHILD("子女", "子女");
|
||||
|
||||
private final String code;
|
||||
private final String desc;
|
||||
|
||||
IndivSubType(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据编码获取描述
|
||||
*/
|
||||
public static String getDescByCode(String code) {
|
||||
for (IndivSubType type : values()) {
|
||||
if (type.getCode().equals(code)) {
|
||||
return type.getDesc();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.ruoyi.ccdi.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiIntermediaryQueryDTO;
|
||||
import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryVO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 中介黑名单联合查询Mapper接口
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-05
|
||||
*/
|
||||
@Mapper
|
||||
public interface CcdiIntermediaryMapper {
|
||||
|
||||
/**
|
||||
* 联合查询中介列表(支持MyBatis Plus分页)
|
||||
* 通过UNION ALL联合查询个人中介和实体中介
|
||||
* 支持按中介类型筛选(1=个人, 2=实体, null=全部)
|
||||
*
|
||||
* @param page 分页对象
|
||||
* @param queryDTO 查询条件
|
||||
* @return 中介VO分页结果
|
||||
*/
|
||||
Page<CcdiIntermediaryVO> selectIntermediaryList(Page<CcdiIntermediaryVO> page, @Param("query") CcdiIntermediaryQueryDTO queryDTO);
|
||||
}
|
||||
@@ -4,11 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.ccdi.domain.CcdiBizIntermediary;
|
||||
import com.ruoyi.ccdi.domain.CcdiEnterpriseBaseInfo;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiIntermediaryEntityAddDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiIntermediaryEntityEditDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiIntermediaryPersonAddDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiIntermediaryPersonEditDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiIntermediaryQueryDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.*;
|
||||
import com.ruoyi.ccdi.domain.excel.CcdiIntermediaryEntityExcel;
|
||||
import com.ruoyi.ccdi.domain.excel.CcdiIntermediaryPersonExcel;
|
||||
import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryEntityDetailVO;
|
||||
@@ -16,6 +12,7 @@ import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryPersonDetailVO;
|
||||
import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryVO;
|
||||
import com.ruoyi.ccdi.mapper.CcdiBizIntermediaryMapper;
|
||||
import com.ruoyi.ccdi.mapper.CcdiEnterpriseBaseInfoMapper;
|
||||
import com.ruoyi.ccdi.mapper.CcdiIntermediaryMapper;
|
||||
import com.ruoyi.ccdi.service.ICcdiIntermediaryService;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import jakarta.annotation.Resource;
|
||||
@@ -41,8 +38,13 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
@Resource
|
||||
private CcdiEnterpriseBaseInfoMapper enterpriseBaseInfoMapper;
|
||||
|
||||
@Resource
|
||||
private CcdiIntermediaryMapper intermediaryMapper;
|
||||
|
||||
/**
|
||||
* 分页查询中介列表
|
||||
* 使用XML联合查询实现,支持个人中介和实体中介的灵活查询
|
||||
* 使用MyBatis Plus分页插件自动处理分页
|
||||
*
|
||||
* @param page 分页对象
|
||||
* @param queryDTO 查询条件
|
||||
@@ -50,61 +52,8 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
*/
|
||||
@Override
|
||||
public Page<CcdiIntermediaryVO> selectIntermediaryPage(Page<CcdiIntermediaryVO> page, CcdiIntermediaryQueryDTO queryDTO) {
|
||||
Page<CcdiIntermediaryVO> voPage = new Page<>(page.getCurrent(), page.getSize());
|
||||
List<CcdiIntermediaryVO> list = new ArrayList<>();
|
||||
|
||||
// 查询个人中介
|
||||
LambdaQueryWrapper<CcdiBizIntermediary> personWrapper = new LambdaQueryWrapper<>();
|
||||
personWrapper.eq(CcdiBizIntermediary::getPersonType, "中介")
|
||||
.like(StringUtils.isNotEmpty(queryDTO.getName()), CcdiBizIntermediary::getName, queryDTO.getName())
|
||||
.like(StringUtils.isNotEmpty(queryDTO.getCertificateNo()), CcdiBizIntermediary::getPersonId, queryDTO.getCertificateNo());
|
||||
|
||||
List<CcdiBizIntermediary> personList = bizIntermediaryMapper.selectList(personWrapper);
|
||||
for (CcdiBizIntermediary person : personList) {
|
||||
CcdiIntermediaryVO vo = new CcdiIntermediaryVO();
|
||||
vo.setId(person.getBizId());
|
||||
vo.setName(person.getName());
|
||||
vo.setCertificateNo(person.getPersonId());
|
||||
vo.setIntermediaryType("1");
|
||||
vo.setPersonType(person.getPersonType());
|
||||
vo.setCompany(person.getCompany());
|
||||
vo.setDataSource(person.getDataSource());
|
||||
vo.setCreateTime(person.getCreateTime());
|
||||
list.add(vo);
|
||||
}
|
||||
|
||||
// 查询实体中介
|
||||
LambdaQueryWrapper<CcdiEnterpriseBaseInfo> entityWrapper = new LambdaQueryWrapper<>();
|
||||
entityWrapper.eq(CcdiEnterpriseBaseInfo::getRiskLevel, "1")
|
||||
.eq(CcdiEnterpriseBaseInfo::getEntSource, "INTERMEDIARY")
|
||||
.like(StringUtils.isNotEmpty(queryDTO.getName()), CcdiEnterpriseBaseInfo::getEnterpriseName, queryDTO.getName())
|
||||
.like(StringUtils.isNotEmpty(queryDTO.getCertificateNo()), CcdiEnterpriseBaseInfo::getSocialCreditCode, queryDTO.getCertificateNo());
|
||||
|
||||
List<CcdiEnterpriseBaseInfo> entityList = enterpriseBaseInfoMapper.selectList(entityWrapper);
|
||||
for (CcdiEnterpriseBaseInfo entity : entityList) {
|
||||
CcdiIntermediaryVO vo = new CcdiIntermediaryVO();
|
||||
vo.setId(entity.getSocialCreditCode());
|
||||
vo.setName(entity.getEnterpriseName());
|
||||
vo.setCertificateNo(entity.getSocialCreditCode());
|
||||
vo.setIntermediaryType("2");
|
||||
vo.setDataSource(entity.getDataSource());
|
||||
vo.setCreateTime(entity.getCreateTime());
|
||||
list.add(vo);
|
||||
}
|
||||
|
||||
// 手动分页
|
||||
int start = (int) ((voPage.getCurrent() - 1) * voPage.getSize());
|
||||
int end = (int) Math.min(start + voPage.getSize(), list.size());
|
||||
|
||||
List<CcdiIntermediaryVO> pageList = new ArrayList<>();
|
||||
if (start < list.size()) {
|
||||
pageList = list.subList(start, end);
|
||||
}
|
||||
|
||||
voPage.setRecords(pageList);
|
||||
voPage.setTotal(list.size());
|
||||
|
||||
return voPage;
|
||||
// 直接调用Mapper的联合查询方法,MyBatis Plus会自动处理分页
|
||||
return intermediaryMapper.selectIntermediaryList(page, queryDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -122,6 +71,8 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
|
||||
CcdiIntermediaryPersonDetailVO vo = new CcdiIntermediaryPersonDetailVO();
|
||||
BeanUtils.copyProperties(person, vo);
|
||||
// 设置中介类型为个人
|
||||
vo.setIntermediaryType("1");
|
||||
return vo;
|
||||
}
|
||||
|
||||
@@ -140,6 +91,10 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
|
||||
CcdiIntermediaryEntityDetailVO vo = new CcdiIntermediaryEntityDetailVO();
|
||||
BeanUtils.copyProperties(entity, vo);
|
||||
// 设置中介类型为实体
|
||||
vo.setIntermediaryType("2");
|
||||
// 设置业务ID(使用socialCreditCode作为bizId,前端判断是否为新增模式)
|
||||
vo.setBizId(socialCreditCode);
|
||||
return vo;
|
||||
}
|
||||
|
||||
@@ -159,7 +114,6 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
|
||||
CcdiBizIntermediary person = new CcdiBizIntermediary();
|
||||
BeanUtils.copyProperties(addDTO, person);
|
||||
person.setPersonType("中介");
|
||||
person.setDataSource("MANUAL");
|
||||
|
||||
return bizIntermediaryMapper.insert(person);
|
||||
@@ -286,6 +240,7 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
|
||||
/**
|
||||
* 导入个人中介数据(批量操作)
|
||||
* 优化:使用批量查询替代循环中的单条查询,减少数据库交互次数
|
||||
*
|
||||
* @param list Excel实体列表
|
||||
* @param updateSupport 是否更新支持
|
||||
@@ -308,7 +263,28 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
List<CcdiBizIntermediary> updateList = new ArrayList<>();
|
||||
List<String> personIds = new ArrayList<>();
|
||||
|
||||
// 第一轮:数据验证和分类
|
||||
// 第一轮:收集所有personId
|
||||
for (CcdiIntermediaryPersonExcel excel : list) {
|
||||
if (StringUtils.isNotEmpty(excel.getPersonId())) {
|
||||
personIds.add(excel.getPersonId());
|
||||
}
|
||||
}
|
||||
|
||||
// 第二轮:批量查询已存在的记录(一次查询替代N次查询)
|
||||
java.util.Map<String, String> personIdToBizIdMap = new java.util.HashMap<>();
|
||||
if (!personIds.isEmpty()) {
|
||||
LambdaQueryWrapper<CcdiBizIntermediary> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.select(CcdiBizIntermediary::getBizId, CcdiBizIntermediary::getPersonId);
|
||||
wrapper.in(CcdiBizIntermediary::getPersonId, personIds);
|
||||
List<CcdiBizIntermediary> existingList = bizIntermediaryMapper.selectList(wrapper);
|
||||
|
||||
// 建立personId到bizId的映射
|
||||
for (CcdiBizIntermediary existing : existingList) {
|
||||
personIdToBizIdMap.put(existing.getPersonId(), existing.getBizId());
|
||||
}
|
||||
}
|
||||
|
||||
// 第三轮:数据验证和分类(使用Map进行快速判断,避免重复查询)
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
try {
|
||||
CcdiIntermediaryPersonExcel excel = list.get(i);
|
||||
@@ -327,12 +303,13 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
person.setPersonType("中介");
|
||||
person.setDataSource("IMPORT");
|
||||
|
||||
personIds.add(excel.getPersonId());
|
||||
|
||||
// 检查唯一性
|
||||
if (!checkPersonIdUnique(excel.getPersonId(), null)) {
|
||||
// 使用Map快速判断是否存在
|
||||
String existingBizId = personIdToBizIdMap.get(excel.getPersonId());
|
||||
if (existingBizId != null) {
|
||||
// 记录已存在
|
||||
if (updateSupport) {
|
||||
// 需要更新,暂时加入更新列表
|
||||
// 需要更新,设置bizId
|
||||
person.setBizId(existingBizId);
|
||||
updateList.add(person);
|
||||
} else {
|
||||
throw new RuntimeException("该证件号已存在");
|
||||
@@ -351,12 +328,15 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
}
|
||||
}
|
||||
|
||||
// 构建返回消息
|
||||
StringBuilder resultMsg = new StringBuilder();
|
||||
|
||||
if (failureNum > 0) {
|
||||
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
|
||||
throw new RuntimeException(failureMsg.toString());
|
||||
resultMsg.append("很抱歉,导入失败!共 ").append(failureNum).append(" 条数据格式不正确,错误如下:");
|
||||
resultMsg.append(failureMsg);
|
||||
}
|
||||
|
||||
// 第二轮:批量处理
|
||||
// 第四轮:批量处理
|
||||
try {
|
||||
// 批量插入新记录
|
||||
if (!insertList.isEmpty()) {
|
||||
@@ -365,31 +345,16 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
|
||||
// 批量更新已存在的记录
|
||||
if (!updateList.isEmpty()) {
|
||||
// 查询已存在记录的bizId
|
||||
LambdaQueryWrapper<CcdiBizIntermediary> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.in(CcdiBizIntermediary::getPersonId, personIds);
|
||||
List<CcdiBizIntermediary> existingList = bizIntermediaryMapper.selectList(wrapper);
|
||||
|
||||
// 建立personId到bizId的映射
|
||||
java.util.Map<String, String> personIdToBizIdMap = new java.util.HashMap<>();
|
||||
for (CcdiBizIntermediary existing : existingList) {
|
||||
personIdToBizIdMap.put(existing.getPersonId(), existing.getBizId());
|
||||
}
|
||||
|
||||
// 设置bizId到更新列表
|
||||
for (CcdiBizIntermediary person : updateList) {
|
||||
String bizId = personIdToBizIdMap.get(person.getPersonId());
|
||||
if (bizId != null) {
|
||||
person.setBizId(bizId);
|
||||
}
|
||||
}
|
||||
|
||||
// 批量更新
|
||||
bizIntermediaryMapper.updateBatch(updateList);
|
||||
}
|
||||
|
||||
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条");
|
||||
return successMsg.toString();
|
||||
// 只在有失败的情况下才返回成功信息,否则返回简洁的成功消息
|
||||
if (failureNum > 0) {
|
||||
resultMsg.append("<br/><br/>成功导入 ").append(successNum).append(" 条数据");
|
||||
} else {
|
||||
resultMsg.append("恭喜您,数据已全部导入成功!共 ").append(successNum).append(" 条");
|
||||
}
|
||||
return resultMsg.toString();
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("批量操作失败:" + e.getMessage());
|
||||
}
|
||||
@@ -397,6 +362,7 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
|
||||
/**
|
||||
* 导入实体中介数据(批量操作)
|
||||
* 优化:使用批量查询替代循环中的单条查询,减少数据库交互次数
|
||||
*
|
||||
* @param list Excel实体列表
|
||||
* @param updateSupport 是否更新支持
|
||||
@@ -419,7 +385,27 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
List<CcdiEnterpriseBaseInfo> updateList = new ArrayList<>();
|
||||
List<String> socialCreditCodes = new ArrayList<>();
|
||||
|
||||
// 第一轮:数据验证和分类
|
||||
// 第一轮:收集所有socialCreditCode
|
||||
for (CcdiIntermediaryEntityExcel excel : list) {
|
||||
if (StringUtils.isNotEmpty(excel.getSocialCreditCode())) {
|
||||
socialCreditCodes.add(excel.getSocialCreditCode());
|
||||
}
|
||||
}
|
||||
|
||||
// 第二轮:批量查询已存在的记录(一次查询替代N次查询)
|
||||
java.util.Map<String, CcdiEnterpriseBaseInfo> existingEntityMap = new java.util.HashMap<>();
|
||||
if (!socialCreditCodes.isEmpty()) {
|
||||
LambdaQueryWrapper<CcdiEnterpriseBaseInfo> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.in(CcdiEnterpriseBaseInfo::getSocialCreditCode, socialCreditCodes);
|
||||
List<CcdiEnterpriseBaseInfo> existingList = enterpriseBaseInfoMapper.selectList(wrapper);
|
||||
|
||||
// 建立socialCreditCode到实体的映射
|
||||
for (CcdiEnterpriseBaseInfo existing : existingList) {
|
||||
existingEntityMap.put(existing.getSocialCreditCode(), existing);
|
||||
}
|
||||
}
|
||||
|
||||
// 第三轮:数据验证和分类(使用Map进行快速判断,避免重复查询)
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
try {
|
||||
CcdiIntermediaryEntityExcel excel = list.get(i);
|
||||
@@ -436,13 +422,13 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
entity.setEntSource("INTERMEDIARY");
|
||||
entity.setDataSource("IMPORT");
|
||||
|
||||
// 检查唯一性
|
||||
// 使用Map快速判断是否存在
|
||||
if (StringUtils.isNotEmpty(excel.getSocialCreditCode())) {
|
||||
socialCreditCodes.add(excel.getSocialCreditCode());
|
||||
|
||||
if (!checkSocialCreditCodeUnique(excel.getSocialCreditCode(), null)) {
|
||||
CcdiEnterpriseBaseInfo existingEntity = existingEntityMap.get(excel.getSocialCreditCode());
|
||||
if (existingEntity != null) {
|
||||
// 记录已存在
|
||||
if (updateSupport) {
|
||||
// 需要更新,加入更新列表
|
||||
// 需要更新,直接使用socialCreditCode作为主键
|
||||
updateList.add(entity);
|
||||
} else {
|
||||
throw new RuntimeException("该统一社会信用代码已存在");
|
||||
@@ -465,12 +451,15 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
}
|
||||
}
|
||||
|
||||
// 构建返回消息
|
||||
StringBuilder resultMsg = new StringBuilder();
|
||||
|
||||
if (failureNum > 0) {
|
||||
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
|
||||
throw new RuntimeException(failureMsg.toString());
|
||||
resultMsg.append("很抱歉,导入失败!共 ").append(failureNum).append(" 条数据格式不正确,错误如下:");
|
||||
resultMsg.append(failureMsg);
|
||||
}
|
||||
|
||||
// 第二轮:批量处理
|
||||
// 第四轮:批量处理
|
||||
try {
|
||||
// 批量插入新记录
|
||||
if (!insertList.isEmpty()) {
|
||||
@@ -479,12 +468,16 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
|
||||
// 批量更新已存在的记录
|
||||
if (!updateList.isEmpty()) {
|
||||
// 批量更新(socialCreditCode已在实体中)
|
||||
enterpriseBaseInfoMapper.updateBatch(updateList);
|
||||
}
|
||||
|
||||
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条");
|
||||
return successMsg.toString();
|
||||
// 只在有失败的情况下才返回成功信息,否则返回简洁的成功消息
|
||||
if (failureNum > 0) {
|
||||
resultMsg.append("<br/><br/>成功导入 ").append(successNum).append(" 条数据");
|
||||
} else {
|
||||
resultMsg.append("恭喜您,数据已全部导入成功!共 ").append(successNum).append(" 条");
|
||||
}
|
||||
return resultMsg.toString();
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("批量操作失败:" + e.getMessage());
|
||||
}
|
||||
|
||||
@@ -2,59 +2,59 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.ccdi.mapper.CcdiBizIntermediaryMapper">
|
||||
<mapper namespace="com.ruoyi.ccdi.mapper.CcdiIntermediaryMapper">
|
||||
|
||||
<!--
|
||||
统一列表联合查询
|
||||
使用UNION ALL联合查询个人中介和实体中介
|
||||
支持按中介类型、姓名、证件号筛选
|
||||
中介黑名单联合查询
|
||||
支持按中介类型筛选: 1=个人中介, 2=实体中介, null=全部
|
||||
使用MyBatis Plus分页插件自动处理分页
|
||||
-->
|
||||
<select id="selectIntermediaryList" resultType="com.ruoyi.ccdi.domain.vo.CcdiIntermediaryVO">
|
||||
<!-- 查询个人中介 -->
|
||||
SELECT
|
||||
biz_id as id,
|
||||
name,
|
||||
person_id as certificate_no,
|
||||
'1' as intermediary_type,
|
||||
person_type,
|
||||
company,
|
||||
data_source,
|
||||
create_time
|
||||
FROM ccdi_biz_intermediary
|
||||
WHERE person_type = '中介'
|
||||
<if test="intermediaryType == null or intermediaryType == '1'">
|
||||
<if test="name != null and name != ''">
|
||||
AND name LIKE CONCAT('%', #{name}, '%')
|
||||
</if>
|
||||
<if test="certificateNo != null and certificateNo != ''">
|
||||
AND person_id = #{certificateNo}
|
||||
</if>
|
||||
</if>
|
||||
SELECT * FROM (
|
||||
<!-- 查询个人中介 -->
|
||||
SELECT
|
||||
biz_id as id,
|
||||
name,
|
||||
person_id as certificate_no,
|
||||
'1' as intermediary_type,
|
||||
person_type,
|
||||
company,
|
||||
data_source,
|
||||
create_time,
|
||||
update_time
|
||||
FROM ccdi_biz_intermediary
|
||||
|
||||
UNION ALL
|
||||
UNION ALL
|
||||
|
||||
<!-- 查询实体中介 -->
|
||||
SELECT
|
||||
social_credit_code as id,
|
||||
enterprise_name as name,
|
||||
social_credit_code as certificate_no,
|
||||
'2' as intermediary_type,
|
||||
'实体' as person_type,
|
||||
enterprise_name as company,
|
||||
data_source,
|
||||
create_time
|
||||
FROM ccdi_enterprise_base_info
|
||||
WHERE risk_level = '1' AND ent_source = 'INTERMEDIARY'
|
||||
<if test="intermediaryType == null or intermediaryType == '2'">
|
||||
<if test="name != null and name != ''">
|
||||
AND enterprise_name LIKE CONCAT('%', #{name}, '%')
|
||||
<!-- 查询实体中介 -->
|
||||
SELECT
|
||||
social_credit_code as id,
|
||||
enterprise_name as name,
|
||||
social_credit_code as certificate_no,
|
||||
'2' as intermediary_type,
|
||||
'实体' as person_type,
|
||||
enterprise_name as company,
|
||||
data_source,
|
||||
create_time,
|
||||
update_time
|
||||
FROM ccdi_enterprise_base_info
|
||||
WHERE risk_level = '1' AND ent_source = 'INTERMEDIARY'
|
||||
) AS combined_result
|
||||
<where>
|
||||
<!-- 按中介类型筛选 -->
|
||||
<if test="query.intermediaryType != null and query.intermediaryType != ''">
|
||||
AND intermediary_type = #{query.intermediaryType}
|
||||
</if>
|
||||
<if test="certificateNo != null and certificateNo != ''">
|
||||
AND social_credit_code = #{certificateNo}
|
||||
<!-- 按姓名/机构名称模糊查询 -->
|
||||
<if test="query.name != null and query.name != ''">
|
||||
AND name LIKE CONCAT('%', #{query.name}, '%')
|
||||
</if>
|
||||
</if>
|
||||
|
||||
ORDER BY create_time DESC
|
||||
<!-- 按证件号/统一社会信用代码精确查询 -->
|
||||
<if test="query.certificateNo != null and query.certificateNo != ''">
|
||||
AND certificate_no = #{query.certificateNo}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY update_time DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user