中介黑名单更新

This commit is contained in:
wkc
2026-02-04 18:36:20 +08:00
parent 72e2539134
commit bc2959b93c
24 changed files with 3612 additions and 575 deletions

View File

@@ -17,7 +17,7 @@ import java.util.List;
*
* @author ruoyi
*/
@Tag(name = "DPC枚举接口", description = "中介黑名单相关枚举选项接口")
@Tag(name = "枚举接口", description = "中介黑名单相关枚举选项接口")
@RestController
@RequestMapping("/ccdi/enum")
public class CcdiEnumController {

View File

@@ -0,0 +1,90 @@
package com.ruoyi.ccdi.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 中介人员业务对象 ccdi_biz_intermediary
*
* @author ruoyi
* @date 2026-02-04
*/
@Data
@TableName("ccdi_biz_intermediary")
public class CcdiBizIntermediary implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/** 业务ID */
@TableId(type = IdType.AUTO)
private Long bizId;
/** 人员类型 */
private String personType;
/** 人员子类型 */
private String personSubType;
/** 姓名 */
private String name;
/** 性别 */
private String gender;
/** 证件类型 */
private String idType;
/** 证件号 */
private String personId;
/** 手机号 */
private String mobile;
/** 微信号 */
private String wechatNo;
/** 联系地址 */
private String contactAddress;
/** 所在公司 */
private String company;
/** 社会信用代码 */
private String socialCreditCode;
/** 职位 */
private String position;
/** 关联人员ID */
private String relatedNumId;
/** 关联关系 */
private String relationType;
/** 数据来源 */
private String dateSource;
/** 备注 */
private String remark;
/** 创建者 */
@TableField(fill = FieldFill.INSERT)
private String createdBy;
/** 更新者 */
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updatedBy;
/** 创建时间 */
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/** 更新时间 */
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}

View File

@@ -0,0 +1,105 @@
package com.ruoyi.ccdi.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 企业基础信息对象 ccdi_enterprise_base_info
*
* @author ruoyi
* @date 2026-02-04
*/
@Data
@TableName("ccdi_enterprise_base_info")
public class CcdiEnterpriseBaseInfo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/** 统一社会信用代码 */
@TableId
private String socialCreditCode;
/** 企业名称 */
private String enterpriseName;
/** 企业类型 */
private String enterpriseType;
/** 企业性质 */
private String enterpriseNature;
/** 行业分类 */
private String industryClass;
/** 所属行业 */
private String industryName;
/** 成立日期 */
private Date establishDate;
/** 注册地址 */
private String registerAddress;
/** 法定代表人 */
private String legalRepresentative;
/** 法定代表人证件类型 */
private String legalCertType;
/** 法定代表人证件号码 */
private String legalCertNo;
/** 股东1 */
private String shareholder1;
/** 股东2 */
private String shareholder2;
/** 股东3 */
private String shareholder3;
/** 股东4 */
private String shareholder4;
/** 股东5 */
private String shareholder5;
/** 状态 */
private String status;
/** 风险等级 */
private String riskLevel;
/** 企业来源 */
private String entSource;
/** 数据来源 */
private String dataSource;
/** 备注 */
private String remark;
/** 创建者 */
@TableField(fill = FieldFill.INSERT)
private String createdBy;
/** 更新者 */
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updatedBy;
/** 创建时间 */
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/** 更新时间 */
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}

View File

@@ -2,12 +2,11 @@ package com.ruoyi.ccdi.domain.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.ruoyi.ccdi.utils.converter.IntermediaryStatusConverter;
import com.ruoyi.ccdi.utils.converter.IntermediaryTypeConverter;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 中介人员黑名单Excel导入导出对象
@@ -32,12 +31,12 @@ public class CcdiIntermediaryBlacklistExcel implements Serializable {
private String certificateNo;
/** 中介类型 */
@ExcelProperty(value = "中介类型", converter = IntermediaryTypeConverter.class, index = 2)
@ExcelProperty(value = "中介类型", index = 2)
@ColumnWidth(15)
private String intermediaryType;
/** 状态 */
@ExcelProperty(value = "状态", converter = IntermediaryStatusConverter.class, index = 3)
@ExcelProperty(value = "状态", index = 3)
@ColumnWidth(10)
private String status;
@@ -45,4 +44,143 @@ public class CcdiIntermediaryBlacklistExcel implements Serializable {
@ExcelProperty(value = "备注", index = 4)
@ColumnWidth(30)
private String remark;
/** 数据来源 */
@ExcelProperty(value = "数据来源", index = 5)
@ColumnWidth(15)
private String dataSource;
// ===== 个人字段 =====
/** 人员类型 */
@ExcelProperty(value = "人员类型", index = 6)
@ColumnWidth(15)
private String indivType;
/** 人员子类型 */
@ExcelProperty(value = "人员子类型", index = 7)
@ColumnWidth(15)
private String indivSubType;
/** 性别 */
@ExcelProperty(value = "性别", index = 8)
@ColumnWidth(10)
private String indivGender;
/** 证件类型 */
@ExcelProperty(value = "证件类型", index = 9)
@ColumnWidth(15)
private String indivCertType;
/** 手机号 */
@ExcelProperty(value = "手机号", index = 10)
@ColumnWidth(15)
private String indivPhone;
/** 微信号 */
@ExcelProperty(value = "微信号", index = 11)
@ColumnWidth(15)
private String indivWechat;
/** 联系地址 */
@ExcelProperty(value = "联系地址", index = 12)
@ColumnWidth(30)
private String indivAddress;
/** 所在公司 */
@ExcelProperty(value = "所在公司", index = 13)
@ColumnWidth(20)
private String indivCompany;
/** 职位 */
@ExcelProperty(value = "职位", index = 14)
@ColumnWidth(15)
private String indivPosition;
/** 关联人员ID */
@ExcelProperty(value = "关联人员ID", index = 15)
@ColumnWidth(15)
private String indivRelatedId;
/** 关联关系 */
@ExcelProperty(value = "关联关系", index = 16)
@ColumnWidth(15)
private String indivRelation;
// ===== 机构字段 =====
/** 统一社会信用代码 */
@ExcelProperty(value = "统一社会信用代码", index = 17)
@ColumnWidth(20)
private String corpCreditCode;
/** 主体类型 */
@ExcelProperty(value = "主体类型", index = 18)
@ColumnWidth(15)
private String corpType;
/** 企业性质 */
@ExcelProperty(value = "企业性质", index = 19)
@ColumnWidth(15)
private String corpNature;
/** 行业分类 */
@ExcelProperty(value = "行业分类", index = 20)
@ColumnWidth(15)
private String corpIndustryCategory;
/** 所属行业 */
@ExcelProperty(value = "所属行业", index = 21)
@ColumnWidth(15)
private String corpIndustry;
/** 成立日期 */
@ExcelProperty(value = "成立日期", index = 22)
@ColumnWidth(15)
private Date corpEstablishDate;
/** 注册地址 */
@ExcelProperty(value = "注册地址", index = 23)
@ColumnWidth(30)
private String corpAddress;
/** 法定代表人 */
@ExcelProperty(value = "法定代表人", index = 24)
@ColumnWidth(15)
private String corpLegalRep;
/** 法定代表人证件类型 */
@ExcelProperty(value = "法定代表人证件类型", index = 25)
@ColumnWidth(20)
private String corpLegalCertType;
/** 法定代表人证件号码 */
@ExcelProperty(value = "法定代表人证件号码", index = 26)
@ColumnWidth(20)
private String corpLegalCertNo;
/** 股东1 */
@ExcelProperty(value = "股东1", index = 27)
@ColumnWidth(15)
private String corpShareholder1;
/** 股东2 */
@ExcelProperty(value = "股东2", index = 28)
@ColumnWidth(15)
private String corpShareholder2;
/** 股东3 */
@ExcelProperty(value = "股东3", index = 29)
@ColumnWidth(15)
private String corpShareholder3;
/** 股东4 */
@ExcelProperty(value = "股东4", index = 30)
@ColumnWidth(15)
private String corpShareholder4;
/** 股东5 */
@ExcelProperty(value = "股东5", index = 31)
@ColumnWidth(15)
private String corpShareholder5;
}

View File

@@ -31,14 +31,11 @@ public class CcdiIntermediaryBlacklistVO implements Serializable {
/** 中介类型 */
private String intermediaryType;
/** 中介类型名称(用于前端显示) */
private String intermediaryTypeName;
/** 状态 */
private String status;
/** 状态名称(用于前端显示) */
private String statusName;
/** 数据来源 */
private String dataSource;
/** 备注 */
private String remark;

View File

@@ -34,24 +34,15 @@ public class CcdiIntermediaryEntityDetailVO implements Serializable {
/** 中介类型 */
private String intermediaryType;
/** 中介类型名称 */
private String intermediaryTypeName;
/** 状态 */
private String status;
/** 状态名称 */
private String statusName;
/** 备注 */
private String remark;
/** 数据来源 */
private String dataSource;
/** 数据来源名称 */
private String dataSourceName;
// ============================================================
// 机构专属字段
// ============================================================
@@ -61,15 +52,9 @@ public class CcdiIntermediaryEntityDetailVO implements Serializable {
/** 主体类型 */
private String corpType;
/** 主体类型名称 */
private String corpTypeName;
/** 企业性质 */
private String corpNature;
/** 企业性质名称 */
private String corpNatureName;
/** 行业分类 */
private String corpIndustryCategory;

View File

@@ -34,24 +34,15 @@ public class CcdiIntermediaryPersonDetailVO implements Serializable {
/** 中介类型 */
private String intermediaryType;
/** 中介类型名称 */
private String intermediaryTypeName;
/** 状态 */
private String status;
/** 状态名称 */
private String statusName;
/** 备注 */
private String remark;
/** 数据来源 */
private String dataSource;
/** 数据来源名称 */
private String dataSourceName;
// ============================================================
// 个人专属字段
// ============================================================
@@ -64,15 +55,9 @@ public class CcdiIntermediaryPersonDetailVO implements Serializable {
/** 性别 */
private String indivGender;
/** 性别名称 */
private String indivGenderName;
/** 证件类型 */
private String indivCertType;
/** 证件类型名称 */
private String indivCertTypeName;
/** 手机号码 */
private String indivPhone;

View File

@@ -0,0 +1,16 @@
package com.ruoyi.ccdi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.ccdi.domain.CcdiBizIntermediary;
import org.apache.ibatis.annotations.Mapper;
/**
* 中介人员业务Mapper接口
*
* @author ruoyi
* @date 2026-02-04
*/
@Mapper
public interface CcdiBizIntermediaryMapper extends BaseMapper<CcdiBizIntermediary> {
}

View File

@@ -0,0 +1,16 @@
package com.ruoyi.ccdi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.ccdi.domain.CcdiEnterpriseBaseInfo;
import org.apache.ibatis.annotations.Mapper;
/**
* 企业基础信息Mapper接口
*
* @author ruoyi
* @date 2026-02-04
*/
@Mapper
public interface CcdiEnterpriseBaseInfoMapper extends BaseMapper<CcdiEnterpriseBaseInfo> {
}

View File

@@ -1,7 +1,11 @@
package com.ruoyi.ccdi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.ccdi.domain.CcdiIntermediaryBlacklist;
import com.ruoyi.ccdi.domain.dto.CcdiIntermediaryBlacklistQueryDTO;
import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryBlacklistVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -29,4 +33,17 @@ public interface CcdiIntermediaryBlacklistMapper extends BaseMapper<CcdiIntermed
* @return 更新行数
*/
int batchUpdate(@Param("list") List<CcdiIntermediaryBlacklist> list);
/**
* 联合查询分页 - 个人和机构中介
* 使用 UNION ALL 合并两张表的数据,在数据库层面完成分页
*
* @param page 分页对象
* @param queryDTO 查询条件
* @return 分页结果
*/
IPage<CcdiIntermediaryBlacklistVO> selectIntermediaryUnionPage(
Page<CcdiIntermediaryBlacklistVO> page,
@Param("queryDTO") CcdiIntermediaryBlacklistQueryDTO queryDTO
);
}

View File

@@ -1,65 +0,0 @@
package com.ruoyi.ccdi.utils.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.util.HashMap;
import java.util.Map;
/**
* 员工状态转换器
* 0=在职, 1=离职
*
* @author ruoyi
*/
public class EmployeeStatusConverter implements Converter<String> {
private static final Map<String, String> CODE_TO_DESC = new HashMap<>();
private static final Map<String, String> DESC_TO_CODE = new HashMap<>();
static {
CODE_TO_DESC.put("0", "在职");
CODE_TO_DESC.put("1", "离职");
DESC_TO_CODE.put("在职", "0");
DESC_TO_CODE.put("离职", "1");
}
@Override
public Class<?> supportJavaTypeKey() {
return String.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public String convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) {
String value = cellData.getStringValue();
if (value == null) {
return null;
}
// 支持中文和代码两种格式
if (DESC_TO_CODE.containsKey(value)) {
return DESC_TO_CODE.get(value);
}
// 如果是纯数字,直接返回
if (value.matches("\\d")) {
return value;
}
throw new IllegalArgumentException("无效的员工状态: " + value + ", 请使用: 在职/离职 或 0/1");
}
@Override
public WriteCellData<?> convertToExcelData(String value, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) {
String desc = CODE_TO_DESC.getOrDefault(value, value);
return new WriteCellData<>(desc);
}
}

View File

@@ -1,47 +0,0 @@
package com.ruoyi.ccdi.utils.handler;
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationHelper;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddressList;
/**
* 员工状态下拉框处理器
*
* @author ruoyi
*/
public class EmployeeStatusSheetWriteHandler implements SheetWriteHandler {
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
Sheet sheet = writeSheetHolder.getSheet();
Workbook workbook = writeWorkbookHolder.getWorkbook();
DataValidationHelper helper = sheet.getDataValidationHelper();
// 创建下拉框数据列表
String[] statusList = {"在职", "离职"};
// 设置状态下拉框从第2行开始第1行是表头第7列状态列索引为6
CellRangeAddressList addressList = new CellRangeAddressList(1, 10000, 6, 6);
// 创建显式列表约束
DataValidation validation = helper.createValidation(
helper.createExplicitListConstraint(statusList),
addressList
);
// 设置提示信息
validation.createPromptBox("状态选择", "请选择员工状态:在职或离职");
validation.setShowPromptBox(true);
// 设置错误提示
validation.createErrorBox("状态错误", "请从下拉框中选择有效的状态值!");
validation.setShowErrorBox(true);
sheet.addValidationData(validation);
}
}

View File

@@ -131,4 +131,62 @@
</foreach>
</update>
<!-- 联合查询分页 - 个人和机构中介 -->
<select id="selectIntermediaryUnionPage" resultType="com.ruoyi.ccdi.domain.vo.CcdiIntermediaryBlacklistVO">
SELECT * FROM (
-- 个人中介查询
SELECT
biz_id AS intermediary_id,
name,
person_id AS certificate_no,
'1' AS intermediary_type,
'0' AS status,
date_source AS data_source,
create_time,
update_time
FROM ccdi_biz_intermediary
WHERE 1=1
<!-- 类型过滤: 只在查询个人或不指定类型时查询 -->
<if test="queryDTO != null and queryDTO.intermediaryType != null and queryDTO.intermediaryType != ''">
AND '1' = #{queryDTO.intermediaryType}
</if>
<if test="queryDTO != null">
<if test="queryDTO.name != null and queryDTO.name != ''">
AND name LIKE CONCAT('%', #{queryDTO.name}, '%')
</if>
<if test="queryDTO.certificateNo != null and queryDTO.certificateNo != ''">
AND person_id LIKE CONCAT('%', #{queryDTO.certificateNo}, '%')
</if>
</if>
UNION ALL
-- 机构中介查询
SELECT
0 AS intermediary_id,
enterprise_name AS name,
social_credit_code AS certificate_no,
'2' AS intermediary_type,
status,
data_source,
create_time,
update_time
FROM ccdi_enterprise_base_info
WHERE ent_source = 'INTERMEDIARY'
<!-- 类型过滤: 只在查询机构或不指定类型时查询 -->
<if test="queryDTO != null and queryDTO.intermediaryType != null and queryDTO.intermediaryType != ''">
AND '2' = #{queryDTO.intermediaryType}
</if>
<if test="queryDTO != null">
<if test="queryDTO.name != null and queryDTO.name != ''">
AND enterprise_name LIKE CONCAT('%', #{queryDTO.name}, '%')
</if>
<if test="queryDTO.certificateNo != null and queryDTO.certificateNo != ''">
AND social_credit_code LIKE CONCAT('%', #{queryDTO.certificateNo}, '%')
</if>
</if>
) AS combined_data
ORDER BY create_time DESC
</select>
</mapper>