完善流程部门权限并补充余值覆盖字段
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -59,3 +59,5 @@ audit.log
|
||||
|
||||
.DS_Store
|
||||
*/.DS_Store
|
||||
|
||||
.codegraph/
|
||||
@@ -0,0 +1,74 @@
|
||||
# 流程列表支行管理员数据权限实施记录
|
||||
|
||||
## 修改日期
|
||||
|
||||
2026-05-18
|
||||
|
||||
## 需求范围
|
||||
|
||||
- 在 `loan_pricing_workflow` 新增 `dept_id`,保存新创建流程的创建人机构号。
|
||||
- `GET /loanPricing/workflow/list` 增加支行管理员数据权限:
|
||||
- 超级管理员、角色名“管理员”或角色标识 `headAdmin` 查看全部流程。
|
||||
- 角色名“支行管理员”或角色标识 `branchAdmin` 查看本人机构及下级机构创建的流程。
|
||||
- 其他用户继续只查看本人 `create_by` 精确匹配的流程。
|
||||
- 不回填历史流程数据,历史 `dept_id` 为空的数据不纳入支行管理员机构权限。
|
||||
- 本次无前端代码改动。
|
||||
|
||||
## 修改内容
|
||||
|
||||
- 新增 `sql/add_workflow_dept_id_20260518.sql`,为流程表增加 `dept_id` 字段和 `idx_dept_id` 索引。
|
||||
- 同步更新流程表建表脚本中的 `dept_id` 字段和索引定义。
|
||||
- `LoanPricingWorkflow` 增加表字段 `deptId` 和列表内部权限字段 `dataScopeDeptId`。
|
||||
- `LoanPricingWorkflowServiceImpl.createLoanPricing` 在插入前写入当前登录人的 `deptId`。
|
||||
- `LoanPricingWorkflowServiceImpl.selectLoanPricingPage` 增加支行管理员分支:
|
||||
- `headAdmin` 不加权限过滤。
|
||||
- `branchAdmin` 写入当前登录人的 `dataScopeDeptId`。
|
||||
- 客户经理继续写入 `dataScopeCreateBy`。
|
||||
- `LoanPricingWorkflowMapper.xml` 增加基于 `lpw.dept_id` 与 `sys_dept.ancestors` 的本机构及下级机构过滤。
|
||||
- 创建者查询参数仍按 `SUBSTRING_INDEX(lpw.create_by, '-', -1)` 只模糊匹配柜员号,并与数据权限条件取交集。
|
||||
|
||||
## 验证记录
|
||||
|
||||
- 单元测试通过:
|
||||
|
||||
```bash
|
||||
mvn -pl ruoyi-loan-pricing -am -Dtest=LoanPricingWorkflowServiceImplTest,LoanPricingWorkflowMapperXmlTest -Dsurefire.failIfNoSpecifiedTests=false test
|
||||
```
|
||||
|
||||
- 后端打包通过:
|
||||
|
||||
```bash
|
||||
mvn -pl ruoyi-admin -am clean package -DskipTests
|
||||
```
|
||||
|
||||
- 已在开发库执行:
|
||||
|
||||
```bash
|
||||
mysql ... loan-pricing < sql/add_workflow_dept_id_20260518.sql
|
||||
```
|
||||
|
||||
- 数据库回查确认 `loan_pricing_workflow.dept_id` 和 `idx_dept_id` 已存在。
|
||||
- API 验证通过:
|
||||
- `8929999/headAdmin` 查询临时流程返回 6 条,包含全部测试数据。
|
||||
- `8920100/branchAdmin` 查询临时流程返回 4 条,仅包含本机构、本人和下级机构数据。
|
||||
- `8920001/客户经理` 查询临时流程返回 1 条,仅包含本人创建数据。
|
||||
- `8920100/branchAdmin` 使用其他支行创建者 `8920201` 作为查询条件时返回 0 条,创建者查询参数不能扩大数据权限。
|
||||
- 真实创建接口验证通过:
|
||||
- `8920100/branchAdmin` 调用个人流程创建接口后,新流程落库 `dept_id=101`,`create_by=测试支行管理员-8920100`。
|
||||
- browser-use 真实页面验证通过:
|
||||
- 支行管理员登录真实流程列表页,页面显示 `共 4 条`。
|
||||
- 页面只显示 `BRANCH_SCOPE_20260518_CREATE`、`BRANCH_SCOPE_20260518_SELF`、`BRANCH_SCOPE_20260518_SAME`、`BRANCH_SCOPE_20260518_CHILD`。
|
||||
- 页面未显示其他支行 `BRANCH_SCOPE_20260518_OTHER` 和普通客户经理本人 `BRANCH_SCOPE_20260518_MANAGER`。
|
||||
|
||||
## 测试数据保留
|
||||
|
||||
- 按复测要求,本次验证保留测试用户和测试流程数据,不做清理。
|
||||
- 保留临时用户:
|
||||
- `8920100`,昵称 `测试支行管理员`,角色 `branchAdmin`,机构 `101`。
|
||||
- 保留流程数据:
|
||||
- `BRANCH_SCOPE_20260518_SELF`,机构 `101`,创建者 `测试支行管理员-8920100`。
|
||||
- `BRANCH_SCOPE_20260518_SAME`,机构 `101`,创建者 `同支行客户经理-8920101`。
|
||||
- `BRANCH_SCOPE_20260518_CHILD`,机构 `103`,创建者 `下级客户经理-8920103`。
|
||||
- `BRANCH_SCOPE_20260518_OTHER`,机构 `102`,创建者 `其他支行客户经理-8920201`。
|
||||
- `BRANCH_SCOPE_20260518_MANAGER`,机构 `100`,创建者 `测试客户经理-8920001`。
|
||||
- `BRANCH_SCOPE_20260518_CREATE`,机构 `101`,创建者 `测试支行管理员-8920100`,由真实新增接口创建。
|
||||
50
doc/implementation-report-2026-05-19-sys-user-role-sql.md
Normal file
50
doc/implementation-report-2026-05-19-sys-user-role-sql.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# sys_user_role 角色关系 SQL 生成记录
|
||||
|
||||
## 修改日期
|
||||
|
||||
2026-05-20
|
||||
|
||||
## 需求范围
|
||||
|
||||
- 根据 `/Users/wkc/Downloads/892.xlsx` 的 `Sheet1` 生成 `sys_user_role` 插入语句。
|
||||
- Excel 字段使用规则:`柜员号` 匹配 `sys_user.user_name` 后取 `sys_user.user_id`,`类型` 匹配 `sys_role.role_name` 后取 `sys_role.role_id`。
|
||||
- 未将 Excel 柜员号直接写入 `sys_user_role.user_id`。
|
||||
- 本次只生成 SQL 文件,未执行写入数据库。
|
||||
|
||||
## 输出文件
|
||||
|
||||
- `sql/insert_sys_user_role_892_20260519.sql`
|
||||
|
||||
## 数据统计
|
||||
|
||||
- Excel 有效数据行:257 行。
|
||||
- 管理员:4 行。
|
||||
- 支行管理员:37 行。
|
||||
- 客户经理:213 行。
|
||||
- Excel 中 3 个重复柜员号同时出现客户经理和支行管理员,本次按支行管理员优先处理,不插入客户经理角色。
|
||||
|
||||
## 重复柜员号
|
||||
|
||||
- `8922557`: 裘朝山 / 892220 / 客户经理 / Excel 第 26 行、裘朝山 / 892220 / 支行管理员 / Excel 第 117 行
|
||||
- `8922667`: 徐华源 / 892080 / 客户经理 / Excel 第 66 行、徐华源 / 892080 / 支行管理员 / Excel 第 121 行
|
||||
- `8923504`: 陈俊杰 / 892170 / 客户经理 / Excel 第 28 行、陈俊杰 / 892170 / 支行管理员 / Excel 第 118 行
|
||||
- 处理规则:以上重复柜员号只保留在支行管理员插入语句中。
|
||||
|
||||
## 数据库映射确认
|
||||
|
||||
- 已查询开发库 `sys_role`,当前有效角色为:
|
||||
- `管理员` -> `role_id=100`, `role_key=headAdmin`
|
||||
- `客户经理` -> `role_id=101`, `role_key=common`
|
||||
- `支行管理员` -> `role_id=102`, `role_key=branchAdmin`
|
||||
- SQL 文件不硬编码 `role_id`,执行时按 `sys_role.role_name` 动态匹配,避免不同环境角色自增 ID 不一致。
|
||||
- SQL 使用 `INSERT IGNORE`,重复执行不会重复写入相同 `(user_id, role_id)`。
|
||||
- SQL 不创建临时表,已按 `管理员`、`支行管理员`、`客户经理` 拆成三条独立插入语句,便于分角色执行和核对影响范围。
|
||||
|
||||
## 验证记录
|
||||
|
||||
- 已读取 Excel 并校验 `类型` 只包含 `管理员`、`支行管理员`、`客户经理`。
|
||||
- 已确认 `sys_user_role` 表结构为 `user_id`、`role_id` 联合主键。
|
||||
- 已对开发库做不写入目标表的干跑校验:257 行角色均可匹配,当前库 Excel 柜员号匹配到的有效用户数为 0。
|
||||
- 批量执行该 SQL 前需先导入 Excel 对应用户,否则三条插入语句因匹配不到 `sys_user.user_name` 不会写入关系。
|
||||
- 已按要求移除临时表建表、临时表插入和临时表删除语句。
|
||||
- 已在事务内执行 SQL 脚本并 `ROLLBACK`,确认三条插入语句语法通过且未落库。
|
||||
38
doc/implementation-report-2026-05-22-corporate-res-cover.md
Normal file
38
doc/implementation-report-2026-05-22-corporate-res-cover.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# 对公余值覆盖字段实施记录
|
||||
|
||||
## 背景
|
||||
|
||||
对公新增流程需要在“贷款信息”分组补充“余值覆盖”开关,字段名为 `resCover`,提交到后端和模型调用时使用 `0/1` 值。
|
||||
|
||||
## 修改内容
|
||||
|
||||
1. 前端企业新增弹窗 `CorporateCreateDialog.vue`
|
||||
- 在“贷款信息”分组新增“余值覆盖”开关。
|
||||
- 表单默认值为 `false`。
|
||||
- 提交时转换为 `resCover: '1'` 或 `resCover: '0'`。
|
||||
|
||||
2. 后端字段链路
|
||||
- `CorporateLoanPricingCreateDTO` 增加 `resCover`。
|
||||
- `LoanPricingWorkflow` 增加 `resCover`,对应数据库字段 `res_cover`。
|
||||
- `LoanPricingConverter` 将 DTO 字段写入流程实体。
|
||||
- `ModelInvokeDTO` 增加 `resCover`。
|
||||
- `LoanPricingModelService` 在企业模型调用前将 `resCover` 归一化为 `0/1`。
|
||||
|
||||
3. 页面展示
|
||||
- 企业流程详情页展示“余值覆盖”。
|
||||
|
||||
4. SQL
|
||||
- 新增 `sql/add_res_cover_20260522.sql`。
|
||||
- 同步更新 `sql/loan_pricing_workflow.sql`、`sql/loan_pricing_schema_20260328.sql`、`sql/loan_pricing_prod_init_20260331.sql`。
|
||||
|
||||
## 验证结果
|
||||
|
||||
- 已执行前端字段静态断言:`npm run test:corporate-create-input-params`,通过。
|
||||
- 已执行前端详情字段静态断言:`npm run test:corporate-display-fields`,通过。
|
||||
- 已执行后端单测:`mvn -pl ruoyi-loan-pricing -am -Dtest=LoanPricingModelServiceTest,LoanPricingWorkflowServiceImplTest -Dsurefire.failIfNoSpecifiedTests=false test`,通过。
|
||||
- 已执行后端打包:`mvn -pl ruoyi-admin -am -DskipTests package`,通过。
|
||||
- 已执行开发库 SQL:`sql/add_res_cover_20260522.sql`,回查 `loan_pricing_workflow.res_cover` 为 `varchar(10)`。
|
||||
- 已启动真实前端页面,通过浏览器打开企业新增弹窗,确认“贷款信息”分组中展示“余值覆盖”开关,且位置在“企业标识”分组之前。
|
||||
- 已用临时后端端口发起企业创建接口,响应中 `resCover` 为 `1`,后端外部模型调用日志确认请求参数包含 `"resCover":"1"`。
|
||||
- 接口验证产生的测试流程数据已清理,回查 `cust_isn = 'RES_COVER_TEST_20260522'` 的流程记录数为 `0`。
|
||||
- 测试时启动的前端和临时后端进程已关闭。
|
||||
@@ -0,0 +1,28 @@
|
||||
# 取消贷款定价页面脱敏展示后端实施记录
|
||||
|
||||
## 需求范围
|
||||
|
||||
- 取消贷款定价流程页面展示层的客户名称、证件号码脱敏效果。
|
||||
- 列表、详情、模型输出基本信息返回完整展示值。
|
||||
- 保留流程表客户名称、证件号码存储加密,以及创建、编辑、模型调用链路中的加解密逻辑。
|
||||
|
||||
## 实施内容
|
||||
|
||||
- 调整 `LoanPricingWorkflowServiceImpl` 分页列表返回逻辑,客户名称解密后直接返回。
|
||||
- 调整 `LoanPricingWorkflowServiceImpl` 详情返回逻辑,流程主信息中的客户名称、证件号码解密后直接返回。
|
||||
- 取消个人、企业模型输出基本信息中的客户名称、证件号码返回前脱敏处理。
|
||||
- 删除不再使用的贷款定价专用展示脱敏服务及对应单元测试。
|
||||
- 更新工作流服务单元测试,验证列表、详情、个人模型输出、企业模型输出均返回完整展示值。
|
||||
|
||||
## 未改动内容
|
||||
|
||||
- 未修改数据库表结构和数据迁移脚本。
|
||||
- 未修改 `SensitiveFieldCryptoService` 存储加解密逻辑。
|
||||
- 未修改登录、密码传输加密逻辑。
|
||||
- 未修改通用 `@Sensitive` 脱敏机制。
|
||||
- 未修改前端业务代码。
|
||||
|
||||
## 验证计划
|
||||
|
||||
- 执行 `LoanPricingWorkflowServiceImplTest`,确认返回展示值与原加解密边界符合预期。
|
||||
- 启动真实前后端页面,进入贷款定价流程列表与详情页,确认页面展示完整客户名称和证件号码。
|
||||
BIN
ruoyi-admin/.DS_Store
vendored
BIN
ruoyi-admin/.DS_Store
vendored
Binary file not shown.
@@ -56,6 +56,9 @@ public class CorporateLoanPricingCreateDTO implements Serializable {
|
||||
@NotBlank(message = "贷款期限不能为空")
|
||||
private String loanTerm;
|
||||
|
||||
@Schema(description = "余值覆盖", example = "0")
|
||||
private String resCover;
|
||||
|
||||
@Schema(description = "绿色贷款", example = "0")
|
||||
private String isGreenLoan;
|
||||
|
||||
|
||||
@@ -163,6 +163,12 @@ public class ModelInvokeDTO {
|
||||
*/
|
||||
private String couponRate;
|
||||
|
||||
/**
|
||||
* 余值覆盖(非必填)
|
||||
* 可选值:0/1
|
||||
*/
|
||||
private String resCover;
|
||||
|
||||
// /**
|
||||
// * 贷款利率(必填)
|
||||
// */
|
||||
|
||||
@@ -112,6 +112,9 @@ public class LoanPricingWorkflow implements Serializable
|
||||
/** 存单票面利率 */
|
||||
private String couponRate;
|
||||
|
||||
/** 余值覆盖: 0/1 */
|
||||
private String resCover;
|
||||
|
||||
/** 是否有经营佐证: true/false */
|
||||
private String bizProof;
|
||||
|
||||
@@ -146,6 +149,9 @@ public class LoanPricingWorkflow implements Serializable
|
||||
/** 是否普惠小微借款人: true/false */
|
||||
private String isInclusiveFinance;
|
||||
|
||||
/** 创建人部门ID */
|
||||
private Long deptId;
|
||||
|
||||
/** 创建者 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private String createBy;
|
||||
@@ -154,6 +160,10 @@ public class LoanPricingWorkflow implements Serializable
|
||||
@TableField(exist = false)
|
||||
private String dataScopeCreateBy;
|
||||
|
||||
/** 列表数据权限部门过滤条件 */
|
||||
@TableField(exist = false)
|
||||
private Long dataScopeDeptId;
|
||||
|
||||
/** 创建时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
package com.ruoyi.loanpricing.service;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
@Service
|
||||
public class LoanPricingSensitiveDisplayService
|
||||
{
|
||||
public String maskCustName(String custName)
|
||||
{
|
||||
if (!StringUtils.hasText(custName))
|
||||
{
|
||||
return custName;
|
||||
}
|
||||
if (custName.contains("公司") && custName.length() > 4)
|
||||
{
|
||||
return custName.substring(0, 2) + "*".repeat(custName.length() - 4) + custName.substring(custName.length() - 2);
|
||||
}
|
||||
if (custName.length() == 1)
|
||||
{
|
||||
return custName;
|
||||
}
|
||||
return custName.substring(0, 1) + "*".repeat(custName.length() - 1);
|
||||
}
|
||||
|
||||
public String maskIdNum(String idNum)
|
||||
{
|
||||
if (!StringUtils.hasText(idNum))
|
||||
{
|
||||
return idNum;
|
||||
}
|
||||
if (idNum.startsWith("91") && idNum.length() == 18)
|
||||
{
|
||||
return idNum.substring(0, 2) + "*".repeat(13) + idNum.substring(idNum.length() - 3);
|
||||
}
|
||||
if (idNum.matches("\\d{17}[\\dXx]"))
|
||||
{
|
||||
return idNum.substring(0, 4) + "*".repeat(8) + idNum.substring(idNum.length() - 4);
|
||||
}
|
||||
if (idNum.length() > 5)
|
||||
{
|
||||
return idNum.substring(0, 2) + "*".repeat(idNum.length() - 5) + idNum.substring(idNum.length() - 3);
|
||||
}
|
||||
return "*".repeat(idNum.length());
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,6 @@ import com.ruoyi.loanpricing.mapper.LoanPricingWorkflowMapper;
|
||||
import com.ruoyi.loanpricing.mapper.ModelCorpOutputFieldsMapper;
|
||||
import com.ruoyi.loanpricing.mapper.ModelRetailOutputFieldsMapper;
|
||||
import com.ruoyi.loanpricing.service.ILoanPricingWorkflowService;
|
||||
import com.ruoyi.loanpricing.service.LoanPricingSensitiveDisplayService;
|
||||
import com.ruoyi.loanpricing.service.LoanPricingModelService;
|
||||
import com.ruoyi.loanpricing.service.SensitiveFieldCryptoService;
|
||||
import com.ruoyi.loanpricing.util.LoanPricingConverter;
|
||||
@@ -67,10 +66,6 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi
|
||||
@Resource
|
||||
private SensitiveFieldCryptoService sensitiveFieldCryptoService;
|
||||
|
||||
@Resource
|
||||
private LoanPricingSensitiveDisplayService loanPricingSensitiveDisplayService;
|
||||
|
||||
|
||||
/**
|
||||
* 发起利率定价流程
|
||||
*
|
||||
@@ -317,9 +312,7 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi
|
||||
{
|
||||
LoanPricingWorkflow scopedQuery = applyWorkflowListDataScope(loanPricingWorkflow);
|
||||
IPage<LoanPricingWorkflowListVO> pageResult = loanPricingWorkflowMapper.selectWorkflowPageWithRates(page, scopedQuery);
|
||||
pageResult.getRecords().forEach(row -> row.setCustName(
|
||||
loanPricingSensitiveDisplayService.maskCustName(
|
||||
sensitiveFieldCryptoService.decrypt(row.getCustName()))));
|
||||
pageResult.getRecords().forEach(row -> row.setCustName(sensitiveFieldCryptoService.decrypt(row.getCustName())));
|
||||
return pageResult;
|
||||
}
|
||||
|
||||
@@ -339,8 +332,8 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi
|
||||
LoanPricingWorkflow loanPricingWorkflow = loanPricingWorkflowMapper.selectOne(wrapper);
|
||||
String plainCustName = sensitiveFieldCryptoService.decrypt(loanPricingWorkflow.getCustName());
|
||||
String plainIdNum = sensitiveFieldCryptoService.decrypt(loanPricingWorkflow.getIdNum());
|
||||
loanPricingWorkflow.setCustName(loanPricingSensitiveDisplayService.maskCustName(plainCustName));
|
||||
loanPricingWorkflow.setIdNum(loanPricingSensitiveDisplayService.maskIdNum(plainIdNum));
|
||||
loanPricingWorkflow.setCustName(plainCustName);
|
||||
loanPricingWorkflow.setIdNum(plainIdNum);
|
||||
loanPricingWorkflowVO.setLoanPricingWorkflow(loanPricingWorkflow);
|
||||
|
||||
if (Objects.nonNull(loanPricingWorkflow.getModelOutputId())){
|
||||
@@ -348,7 +341,6 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi
|
||||
ModelRetailOutputFields modelRetailOutputFields = modelRetailOutputFieldsMapper.selectById(loanPricingWorkflow.getModelOutputId());
|
||||
if (Objects.nonNull(modelRetailOutputFields))
|
||||
{
|
||||
maskModelRetailOutputBasicInfo(modelRetailOutputFields);
|
||||
loanPricingWorkflow.setLoanRate(modelRetailOutputFields.getFinalCalculateRate());
|
||||
}
|
||||
loanPricingWorkflowVO.setModelRetailOutputFields(modelRetailOutputFields);
|
||||
@@ -357,7 +349,6 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi
|
||||
ModelCorpOutputFields modelCorpOutputFields = modelCorpOutputFieldsMapper.selectById(loanPricingWorkflow.getModelOutputId());
|
||||
if (Objects.nonNull(modelCorpOutputFields))
|
||||
{
|
||||
maskModelCorpOutputBasicInfo(modelCorpOutputFields);
|
||||
loanPricingWorkflow.setLoanRate(modelCorpOutputFields.getFinalCalculateRate());
|
||||
}
|
||||
loanPricingWorkflowVO.setModelCorpOutputFields(modelCorpOutputFields);
|
||||
@@ -455,22 +446,6 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi
|
||||
return user.getNickName() + "-" + loginUser.getUsername();
|
||||
}
|
||||
|
||||
private void maskModelRetailOutputBasicInfo(ModelRetailOutputFields modelRetailOutputFields)
|
||||
{
|
||||
modelRetailOutputFields.setCustName(
|
||||
loanPricingSensitiveDisplayService.maskCustName(modelRetailOutputFields.getCustName()));
|
||||
modelRetailOutputFields.setIdNum(
|
||||
loanPricingSensitiveDisplayService.maskIdNum(modelRetailOutputFields.getIdNum()));
|
||||
}
|
||||
|
||||
private void maskModelCorpOutputBasicInfo(ModelCorpOutputFields modelCorpOutputFields)
|
||||
{
|
||||
modelCorpOutputFields.setCustName(
|
||||
loanPricingSensitiveDisplayService.maskCustName(modelCorpOutputFields.getCustName()));
|
||||
modelCorpOutputFields.setIdNum(
|
||||
loanPricingSensitiveDisplayService.maskIdNum(modelCorpOutputFields.getIdNum()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 设定执行利率
|
||||
*
|
||||
|
||||
@@ -58,6 +58,7 @@ public class LoanPricingConverter {
|
||||
entity.setBusinessType(dto.getBusinessType());
|
||||
entity.setLoanRateHistory(dto.getLoanRateHistory());
|
||||
entity.setCouponRate(dto.getCouponRate());
|
||||
entity.setResCover(dto.getResCover());
|
||||
entity.setRepayMethod(dto.getRepayMethod());
|
||||
entity.setCollType(dto.getCollType());
|
||||
entity.setCollThirdParty(dto.getCollThirdParty());
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
<if test="query != null and query.dataScopeCreateBy != null and query.dataScopeCreateBy != ''">
|
||||
AND lpw.create_by = #{query.dataScopeCreateBy}
|
||||
</if>
|
||||
<if test="query != null and query.dataScopeDeptId != null">
|
||||
AND lpw.dept_id IN (
|
||||
SELECT dept_id
|
||||
FROM sys_dept
|
||||
WHERE del_flag = '0'
|
||||
AND (dept_id = #{query.dataScopeDeptId}
|
||||
OR find_in_set(#{query.dataScopeDeptId}, ancestors))
|
||||
)
|
||||
</if>
|
||||
<if test="query != null and query.createBy != null and query.createBy != ''">
|
||||
AND SUBSTRING_INDEX(lpw.create_by, '-', -1) LIKE CONCAT('%', #{query.createBy}, '%')
|
||||
</if>
|
||||
|
||||
@@ -19,6 +19,8 @@ class LoanPricingWorkflowMapperXmlTest
|
||||
assertTrue(xml.contains("WHEN lpw.cust_type = '个人' THEN mr.final_calculate_rate"));
|
||||
assertTrue(xml.contains("WHEN lpw.cust_type = '企业' THEN mc.final_calculate_rate"));
|
||||
assertTrue(xml.contains("lpw.create_by = #{query.dataScopeCreateBy}"));
|
||||
assertTrue(xml.contains("lpw.dept_id IN"));
|
||||
assertTrue(xml.contains("find_in_set(#{query.dataScopeDeptId}, ancestors)"));
|
||||
assertTrue(xml.contains("SUBSTRING_INDEX(lpw.create_by, '-', -1) LIKE CONCAT('%', #{query.createBy}, '%')"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
package com.ruoyi.loanpricing.service;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class LoanPricingSensitiveDisplayServiceTest
|
||||
{
|
||||
private final LoanPricingSensitiveDisplayService displayService = new LoanPricingSensitiveDisplayService();
|
||||
|
||||
@Test
|
||||
void shouldMaskPersonalNameAndIdNum()
|
||||
{
|
||||
assertEquals("张*", displayService.maskCustName("张三"));
|
||||
assertEquals("1101********1234", displayService.maskIdNum("110101199001011234"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldMaskCorporateNameAndCreditCode()
|
||||
{
|
||||
assertEquals("测试****公司", displayService.maskCustName("测试科技有限公司"));
|
||||
assertEquals("91*************00X", displayService.maskIdNum("91110000100000000X"));
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,6 @@ import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowVO;
|
||||
import com.ruoyi.loanpricing.mapper.LoanPricingWorkflowMapper;
|
||||
import com.ruoyi.loanpricing.mapper.ModelCorpOutputFieldsMapper;
|
||||
import com.ruoyi.loanpricing.mapper.ModelRetailOutputFieldsMapper;
|
||||
import com.ruoyi.loanpricing.service.LoanPricingSensitiveDisplayService;
|
||||
import com.ruoyi.loanpricing.service.LoanPricingModelService;
|
||||
import com.ruoyi.loanpricing.service.SensitiveFieldCryptoService;
|
||||
import org.apache.ibatis.builder.MapperBuilderAssistant;
|
||||
@@ -66,9 +65,6 @@ class LoanPricingWorkflowServiceImplTest
|
||||
@Mock
|
||||
private SensitiveFieldCryptoService sensitiveFieldCryptoService;
|
||||
|
||||
@Mock
|
||||
private LoanPricingSensitiveDisplayService loanPricingSensitiveDisplayService;
|
||||
|
||||
@InjectMocks
|
||||
private LoanPricingWorkflowServiceImpl loanPricingWorkflowService;
|
||||
|
||||
@@ -122,7 +118,7 @@ class LoanPricingWorkflowServiceImplTest
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldMaskCustNameWhenReturningPagedWorkflowList()
|
||||
void shouldReturnPlainCustNameWhenReturningPagedWorkflowList()
|
||||
{
|
||||
LoanPricingWorkflowListVO row = new LoanPricingWorkflowListVO();
|
||||
row.setCustName("cipher-name");
|
||||
@@ -132,11 +128,10 @@ class LoanPricingWorkflowServiceImplTest
|
||||
|
||||
when(loanPricingWorkflowMapper.selectWorkflowPageWithRates(any(), any())).thenReturn(pageResult);
|
||||
when(sensitiveFieldCryptoService.decrypt("cipher-name")).thenReturn("张三");
|
||||
when(loanPricingSensitiveDisplayService.maskCustName("张三")).thenReturn("张*");
|
||||
|
||||
IPage<LoanPricingWorkflowListVO> result = loanPricingWorkflowService.selectLoanPricingPage(new Page<>(1, 10), new LoanPricingWorkflow());
|
||||
|
||||
assertEquals("张*", result.getRecords().get(0).getCustName());
|
||||
assertEquals("张三", result.getRecords().get(0).getCustName());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -543,7 +538,7 @@ class LoanPricingWorkflowServiceImplTest
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldMaskCustNameAndIdNumWhenReturningWorkflowDetail()
|
||||
void shouldReturnPlainCustNameAndIdNumWhenReturningWorkflowDetail()
|
||||
{
|
||||
LoanPricingWorkflow workflow = new LoanPricingWorkflow();
|
||||
workflow.setSerialNum("P20260328001");
|
||||
@@ -554,17 +549,15 @@ class LoanPricingWorkflowServiceImplTest
|
||||
when(loanPricingWorkflowMapper.selectOne(any())).thenReturn(workflow);
|
||||
when(sensitiveFieldCryptoService.decrypt("cipher-name")).thenReturn("张三");
|
||||
when(sensitiveFieldCryptoService.decrypt("cipher-id")).thenReturn("110101199001011234");
|
||||
when(loanPricingSensitiveDisplayService.maskCustName("张三")).thenReturn("张*");
|
||||
when(loanPricingSensitiveDisplayService.maskIdNum("110101199001011234")).thenReturn("1101********1234");
|
||||
|
||||
LoanPricingWorkflowVO result = loanPricingWorkflowService.selectLoanPricingBySerialNum("P20260328001");
|
||||
|
||||
assertEquals("张*", result.getLoanPricingWorkflow().getCustName());
|
||||
assertEquals("1101********1234", result.getLoanPricingWorkflow().getIdNum());
|
||||
assertEquals("张三", result.getLoanPricingWorkflow().getCustName());
|
||||
assertEquals("110101199001011234", result.getLoanPricingWorkflow().getIdNum());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldMaskCustNameAndIdNumInRetailModelOutputBasicInfo()
|
||||
void shouldReturnPlainCustNameAndIdNumInRetailModelOutputBasicInfo()
|
||||
{
|
||||
LoanPricingWorkflow workflow = new LoanPricingWorkflow();
|
||||
workflow.setSerialNum("P20260328001");
|
||||
@@ -582,13 +575,11 @@ class LoanPricingWorkflowServiceImplTest
|
||||
when(modelRetailOutputFieldsMapper.selectById(11L)).thenReturn(retailOutputFields);
|
||||
when(sensitiveFieldCryptoService.decrypt("cipher-name")).thenReturn("张三");
|
||||
when(sensitiveFieldCryptoService.decrypt("cipher-id")).thenReturn("110101199001011234");
|
||||
when(loanPricingSensitiveDisplayService.maskCustName("张三")).thenReturn("张*");
|
||||
when(loanPricingSensitiveDisplayService.maskIdNum("110101199001011234")).thenReturn("1101********1234");
|
||||
|
||||
LoanPricingWorkflowVO result = loanPricingWorkflowService.selectLoanPricingBySerialNum("P20260328001");
|
||||
|
||||
assertEquals("张*", result.getModelRetailOutputFields().getCustName());
|
||||
assertEquals("1101********1234", result.getModelRetailOutputFields().getIdNum());
|
||||
assertEquals("张三", result.getModelRetailOutputFields().getCustName());
|
||||
assertEquals("110101199001011234", result.getModelRetailOutputFields().getIdNum());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -615,7 +606,7 @@ class LoanPricingWorkflowServiceImplTest
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldMaskCustNameAndIdNumInCorporateModelOutputBasicInfo()
|
||||
void shouldReturnPlainCustNameAndIdNumInCorporateModelOutputBasicInfo()
|
||||
{
|
||||
LoanPricingWorkflow workflow = new LoanPricingWorkflow();
|
||||
workflow.setSerialNum("C20260328001");
|
||||
@@ -633,13 +624,11 @@ class LoanPricingWorkflowServiceImplTest
|
||||
when(modelCorpOutputFieldsMapper.selectById(22L)).thenReturn(corpOutputFields);
|
||||
when(sensitiveFieldCryptoService.decrypt("cipher-name")).thenReturn("测试科技有限公司");
|
||||
when(sensitiveFieldCryptoService.decrypt("cipher-id")).thenReturn("91110000100000000X");
|
||||
when(loanPricingSensitiveDisplayService.maskCustName("测试科技有限公司")).thenReturn("测试****公司");
|
||||
when(loanPricingSensitiveDisplayService.maskIdNum("91110000100000000X")).thenReturn("91*************00X");
|
||||
|
||||
LoanPricingWorkflowVO result = loanPricingWorkflowService.selectLoanPricingBySerialNum("C20260328001");
|
||||
|
||||
assertEquals("测试****公司", result.getModelCorpOutputFields().getCustName());
|
||||
assertEquals("91*************00X", result.getModelCorpOutputFields().getIdNum());
|
||||
assertEquals("测试科技有限公司", result.getModelCorpOutputFields().getCustName());
|
||||
assertEquals("91110000100000000X", result.getModelCorpOutputFields().getIdNum());
|
||||
}
|
||||
|
||||
private LoanPricingWorkflow validWorkflow()
|
||||
|
||||
@@ -82,6 +82,7 @@
|
||||
<el-descriptions-item label="申请金额">{{ detailData.applyAmt }} 元</el-descriptions-item>
|
||||
<el-descriptions-item label="业务种类">{{ detailData.businessType || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="历史贷款利率">{{ formatRate(detailData.loanRateHistory) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="余值覆盖">{{ formatBoolean(detailData.resCover) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="绿色贷款">{{ formatBoolean(detailData.isGreenLoan) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="贸易和建筑业企业">{{ formatBoolean(detailData.isTradeBuildEnt) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="抵质押类型">{{ detailData.collType || '-' }}</el-descriptions-item>
|
||||
|
||||
5
sql/add_workflow_dept_id_20260518.sql
Normal file
5
sql/add_workflow_dept_id_20260518.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
-- 为流程表增加创建人部门ID,用于支行管理员流程列表数据权限
|
||||
ALTER TABLE `loan_pricing_workflow`
|
||||
ADD COLUMN `dept_id` bigint(20) DEFAULT NULL COMMENT '创建人部门ID' AFTER `is_inclusive_finance`;
|
||||
|
||||
CREATE INDEX `idx_dept_id` ON `loan_pricing_workflow` (`dept_id`);
|
||||
286
sql/insert_sys_user_role_892_20260519.sql
Normal file
286
sql/insert_sys_user_role_892_20260519.sql
Normal file
@@ -0,0 +1,286 @@
|
||||
-- 根据 /Users/wkc/Downloads/892.xlsx Sheet1 生成 sys_user_role 角色关系
|
||||
-- 生成日期: 2026-05-20
|
||||
-- Excel 数据行数: 257
|
||||
-- 角色分布: 管理员 4, 支行管理员 37, 客户经理 213
|
||||
-- 重复柜员号按支行管理员处理,不再插入客户经理角色。
|
||||
-- user_id 取值规则: Excel 柜员号 -> sys_user.user_name -> sys_user.user_id。
|
||||
-- 本脚本不创建临时表,三条 INSERT 语句分别插入三种角色。
|
||||
-- 执行前需确保 sys_user 已按柜员号写入 user_name,sys_role 已存在对应角色名。
|
||||
|
||||
-- 插入管理员角色关系,共 4 行
|
||||
INSERT IGNORE INTO sys_user_role (user_id, role_id)
|
||||
SELECT DISTINCT u.user_id, r.role_id
|
||||
FROM (
|
||||
SELECT '8925071' AS teller_no -- Excel 第 255 行,吴津江,机构 892000
|
||||
UNION ALL SELECT '8923774' -- Excel 第 256 行,陈夏超,机构 892000
|
||||
UNION ALL SELECT '8925041' -- Excel 第 257 行,鲁琳洁,机构 892000
|
||||
UNION ALL SELECT '8923490' -- Excel 第 258 行,王赛金,机构 892000
|
||||
) src
|
||||
JOIN sys_user u ON u.user_name = src.teller_no AND u.del_flag = '0'
|
||||
JOIN sys_role r ON r.role_name = '管理员' AND r.status = '0' AND r.del_flag = '0';
|
||||
|
||||
-- 插入支行管理员角色关系,共 37 行
|
||||
INSERT IGNORE INTO sys_user_role (user_id, role_id)
|
||||
SELECT DISTINCT u.user_id, r.role_id
|
||||
FROM (
|
||||
SELECT '8922653' AS teller_no -- Excel 第 2 行,赵健君,机构 892160
|
||||
UNION ALL SELECT '8922319' -- Excel 第 3 行,俞宏,机构 892200
|
||||
UNION ALL SELECT '8923428' -- Excel 第 4 行,胡海松,机构 892060
|
||||
UNION ALL SELECT '8922185' -- Excel 第 5 行,朱江龙,机构 892110
|
||||
UNION ALL SELECT '8923393' -- Excel 第 6 行,常斌斌,机构 892020
|
||||
UNION ALL SELECT '8922645' -- Excel 第 7 行,陈勇毅,机构 892100
|
||||
UNION ALL SELECT '8923511' -- Excel 第 8 行,胡卓奇,机构 892170
|
||||
UNION ALL SELECT '8923706' -- Excel 第 9 行,夏俊杰,机构 892190
|
||||
UNION ALL SELECT '8927547' -- Excel 第 10 行,鲁文倬,机构 892130
|
||||
UNION ALL SELECT '8923370' -- Excel 第 11 行,杨力,机构 892050
|
||||
UNION ALL SELECT '8923612' -- Excel 第 12 行,沈萍,机构 892220
|
||||
UNION ALL SELECT '8923105' -- Excel 第 13 行,王忠,机构 892070
|
||||
UNION ALL SELECT '8923326' -- Excel 第 14 行,陈燕,机构 892140
|
||||
UNION ALL SELECT '8922341' -- Excel 第 15 行,王丽娜,机构 892210
|
||||
UNION ALL SELECT '8922250' -- Excel 第 16 行,孙银峰,机构 892030
|
||||
UNION ALL SELECT '8923475' -- Excel 第 17 行,张绒,机构 892010
|
||||
UNION ALL SELECT '8923249' -- Excel 第 18 行,朱珊珊,机构 892090
|
||||
UNION ALL SELECT '8923244' -- Excel 第 19 行,汤琴华,机构 892080
|
||||
UNION ALL SELECT '8923215' -- Excel 第 113 行,徐国栋,机构 892100
|
||||
UNION ALL SELECT '8923351' -- Excel 第 114 行,刘春燕,机构 892050
|
||||
UNION ALL SELECT '8923384' -- Excel 第 115 行,马钦,机构 892090
|
||||
UNION ALL SELECT '8922686' -- Excel 第 116 行,许训华,机构 892020
|
||||
UNION ALL SELECT '8922557' -- Excel 第 117 行,裘朝山,机构 892220
|
||||
UNION ALL SELECT '8923504' -- Excel 第 118 行,陈俊杰,机构 892170
|
||||
UNION ALL SELECT '8922344' -- Excel 第 119 行,徐浩锋,机构 892110
|
||||
UNION ALL SELECT '8923510' -- Excel 第 120 行,陆波,机构 892130
|
||||
UNION ALL SELECT '8922667' -- Excel 第 121 行,徐华源,机构 892080
|
||||
UNION ALL SELECT '8923190' -- Excel 第 122 行,倪舟军,机构 892160
|
||||
UNION ALL SELECT '8922309' -- Excel 第 123 行,刘炯,机构 892210
|
||||
UNION ALL SELECT '8922630' -- Excel 第 124 行,李文江,机构 892200
|
||||
UNION ALL SELECT '8922257' -- Excel 第 125 行,傅泽民,机构 892080
|
||||
UNION ALL SELECT '8928849' -- Excel 第 126 行,赵红江,机构 892030
|
||||
UNION ALL SELECT '8923354' -- Excel 第 127 行,马斯,机构 892060
|
||||
UNION ALL SELECT '8923102' -- Excel 第 128 行,徐峰,机构 892010
|
||||
UNION ALL SELECT '8922534' -- Excel 第 129 行,谢铭杰,机构 892170
|
||||
UNION ALL SELECT '8923229' -- Excel 第 130 行,杜铜方,机构 892190
|
||||
UNION ALL SELECT '8921245' -- Excel 第 131 行,徐红玲,机构 892140
|
||||
) src
|
||||
JOIN sys_user u ON u.user_name = src.teller_no AND u.del_flag = '0'
|
||||
JOIN sys_role r ON r.role_name = '支行管理员' AND r.status = '0' AND r.del_flag = '0';
|
||||
|
||||
-- 插入客户经理角色关系,共 213 行
|
||||
INSERT IGNORE INTO sys_user_role (user_id, role_id)
|
||||
SELECT DISTINCT u.user_id, r.role_id
|
||||
FROM (
|
||||
SELECT '8923387' AS teller_no -- Excel 第 20 行,倪嫣倩,机构 892020
|
||||
UNION ALL SELECT '8923976' -- Excel 第 21 行,俞丽佳,机构 892020
|
||||
UNION ALL SELECT '8922535' -- Excel 第 22 行,金军勇,机构 892142
|
||||
UNION ALL SELECT '8923566' -- Excel 第 23 行,范水月,机构 892213
|
||||
UNION ALL SELECT '8923179' -- Excel 第 24 行,章恩耀,机构 892014
|
||||
UNION ALL SELECT '8923388' -- Excel 第 25 行,陈立波,机构 892080
|
||||
UNION ALL SELECT '8928990' -- Excel 第 27 行,郑永锋,机构 892200
|
||||
UNION ALL SELECT '8925312' -- Excel 第 29 行,俞一凡,机构 892020
|
||||
UNION ALL SELECT '8922316' -- Excel 第 30 行,陈建囡,机构 892080
|
||||
UNION ALL SELECT '8923253' -- Excel 第 31 行,潘烨,机构 892214
|
||||
UNION ALL SELECT '8923188' -- Excel 第 32 行,卢丰,机构 892140
|
||||
UNION ALL SELECT '8923872' -- Excel 第 33 行,戴魏杰,机构 892050
|
||||
UNION ALL SELECT '8923478' -- Excel 第 34 行,陈泽宇,机构 892102
|
||||
UNION ALL SELECT '8923315' -- Excel 第 35 行,赵政,机构 892010
|
||||
UNION ALL SELECT '8925714' -- Excel 第 36 行,陈承,机构 892030
|
||||
UNION ALL SELECT '8923752' -- Excel 第 37 行,金佳裕,机构 892160
|
||||
UNION ALL SELECT '8922227' -- Excel 第 38 行,谢冬青,机构 892050
|
||||
UNION ALL SELECT '8925040' -- Excel 第 39 行,谢顺达,机构 892193
|
||||
UNION ALL SELECT '8923242' -- Excel 第 40 行,夏德鑫,机构 892030
|
||||
UNION ALL SELECT '8922392' -- Excel 第 41 行,阮寺均,机构 892100
|
||||
UNION ALL SELECT '8923327' -- Excel 第 42 行,屠超众,机构 892110
|
||||
UNION ALL SELECT '8923223' -- Excel 第 43 行,沈佳敏,机构 892022
|
||||
UNION ALL SELECT '8923309' -- Excel 第 44 行,徐岳锋,机构 892070
|
||||
UNION ALL SELECT '8923561' -- Excel 第 45 行,赵斌,机构 892220
|
||||
UNION ALL SELECT '8923421' -- Excel 第 46 行,王燕薇,机构 892210
|
||||
UNION ALL SELECT '8923324' -- Excel 第 47 行,孙绍平,机构 892170
|
||||
UNION ALL SELECT '8923766' -- Excel 第 48 行,孙章丽,机构 892021
|
||||
UNION ALL SELECT '8923429' -- Excel 第 49 行,袁叶晨,机构 892192
|
||||
UNION ALL SELECT '8923262' -- Excel 第 50 行,黄滨,机构 892111
|
||||
UNION ALL SELECT '8923838' -- Excel 第 51 行,潘晋洋,机构 892011
|
||||
UNION ALL SELECT '8923317' -- Excel 第 52 行,朱鋆,机构 892051
|
||||
UNION ALL SELECT '8923271' -- Excel 第 53 行,陈军,机构 892060
|
||||
UNION ALL SELECT '8923981' -- Excel 第 54 行,王鋆盈,机构 892200
|
||||
UNION ALL SELECT '8922473' -- Excel 第 55 行,徐伟达,机构 892170
|
||||
UNION ALL SELECT '8922323' -- Excel 第 56 行,赵杰,机构 892141
|
||||
UNION ALL SELECT '8923799' -- Excel 第 57 行,赵焱,机构 892090
|
||||
UNION ALL SELECT '8922399' -- Excel 第 58 行,陈烈,机构 892010
|
||||
UNION ALL SELECT '8923379' -- Excel 第 59 行,金鑫,机构 892191
|
||||
UNION ALL SELECT '8923101' -- Excel 第 60 行,娄瑛,机构 892030
|
||||
UNION ALL SELECT '8923773' -- Excel 第 61 行,叶鑫,机构 892090
|
||||
UNION ALL SELECT '8922625' -- Excel 第 62 行,李银钢,机构 892140
|
||||
UNION ALL SELECT '8923871' -- Excel 第 63 行,高飞雍,机构 892082
|
||||
UNION ALL SELECT '8925534' -- Excel 第 64 行,龚泽烨,机构 892010
|
||||
UNION ALL SELECT '8925220' -- Excel 第 65 行,陈方正,机构 892166
|
||||
UNION ALL SELECT '8923820' -- Excel 第 67 行,徐金燕,机构 892170
|
||||
UNION ALL SELECT '8923104' -- Excel 第 68 行,阮钟威,机构 892160
|
||||
UNION ALL SELECT '8923278' -- Excel 第 69 行,楼建灿,机构 892200
|
||||
UNION ALL SELECT '8923435' -- Excel 第 70 行,王金锦,机构 892035
|
||||
UNION ALL SELECT '8923501' -- Excel 第 71 行,范少材,机构 892041
|
||||
UNION ALL SELECT '8923848' -- Excel 第 72 行,沈燕燕,机构 892220
|
||||
UNION ALL SELECT '8923231' -- Excel 第 73 行,张何,机构 892161
|
||||
UNION ALL SELECT '8923368' -- Excel 第 74 行,王钗钗,机构 892133
|
||||
UNION ALL SELECT '8923816' -- Excel 第 75 行,陈姝莹,机构 892101
|
||||
UNION ALL SELECT '8923209' -- Excel 第 76 行,徐敏敏,机构 892050
|
||||
UNION ALL SELECT '8923549' -- Excel 第 77 行,陆颖琳,机构 892130
|
||||
UNION ALL SELECT '8923118' -- Excel 第 78 行,邵琴,机构 892172
|
||||
UNION ALL SELECT '8923914' -- Excel 第 79 行,陆佳英,机构 892226
|
||||
UNION ALL SELECT '8921232' -- Excel 第 80 行,陈曙光,机构 892010
|
||||
UNION ALL SELECT '8923747' -- Excel 第 81 行,王祝芳,机构 892060
|
||||
UNION ALL SELECT '8923254' -- Excel 第 82 行,章霄,机构 892030
|
||||
UNION ALL SELECT '8923434' -- Excel 第 83 行,姚明权,机构 892200
|
||||
UNION ALL SELECT '8923502' -- Excel 第 84 行,邵钰凤,机构 892021
|
||||
UNION ALL SELECT '8923390' -- Excel 第 85 行,谢羽青,机构 892170
|
||||
UNION ALL SELECT '8923550' -- Excel 第 86 行,俞李鲲,机构 892211
|
||||
UNION ALL SELECT '8922425' -- Excel 第 87 行,罗国杰,机构 892100
|
||||
UNION ALL SELECT '8923540' -- Excel 第 88 行,王帅,机构 892190
|
||||
UNION ALL SELECT '8923224' -- Excel 第 89 行,应振宇,机构 892020
|
||||
UNION ALL SELECT '8923894' -- Excel 第 90 行,任鹏飞,机构 892021
|
||||
UNION ALL SELECT '8923222' -- Excel 第 91 行,朱烨,机构 892010
|
||||
UNION ALL SELECT '8923357' -- Excel 第 92 行,陈滟,机构 892110
|
||||
UNION ALL SELECT '8923812' -- Excel 第 93 行,周虹,机构 892083
|
||||
UNION ALL SELECT '8922167' -- Excel 第 94 行,魏铁柱,机构 892182
|
||||
UNION ALL SELECT '8922248' -- Excel 第 95 行,吴智光,机构 892070
|
||||
UNION ALL SELECT '8922247' -- Excel 第 96 行,吴俊勋,机构 892060
|
||||
UNION ALL SELECT '8923383' -- Excel 第 97 行,王宽,机构 892140
|
||||
UNION ALL SELECT '8923350' -- Excel 第 98 行,徐骏妮,机构 892200
|
||||
UNION ALL SELECT '8923352' -- Excel 第 99 行,韩镭,机构 892146
|
||||
UNION ALL SELECT '8923861' -- Excel 第 100 行,严禹彬,机构 892160
|
||||
UNION ALL SELECT '8922743' -- Excel 第 101 行,刘建军,机构 892130
|
||||
UNION ALL SELECT '8923963' -- Excel 第 102 行,王一,机构 892030
|
||||
UNION ALL SELECT '8923922' -- Excel 第 103 行,徐鹤立,机构 892113
|
||||
UNION ALL SELECT '8925176' -- Excel 第 104 行,徐家栋,机构 892210
|
||||
UNION ALL SELECT '8922258' -- Excel 第 105 行,朱蓉蓉,机构 892161
|
||||
UNION ALL SELECT '8923247' -- Excel 第 106 行,王陈炯,机构 892031
|
||||
UNION ALL SELECT '8923117' -- Excel 第 107 行,黄辉,机构 892223
|
||||
UNION ALL SELECT '8923929' -- Excel 第 108 行,俞佳娜,机构 892090
|
||||
UNION ALL SELECT '8925461' -- Excel 第 109 行,厉佳贝,机构 892224
|
||||
UNION ALL SELECT '8923751' -- Excel 第 110 行,劳泽涛,机构 892132
|
||||
UNION ALL SELECT '8923458' -- Excel 第 111 行,徐泽钏,机构 892145
|
||||
UNION ALL SELECT '8923415' -- Excel 第 112 行,吴璟琳,机构 892200
|
||||
UNION ALL SELECT '8922687' -- Excel 第 132 行,张蓉,机构 892133
|
||||
UNION ALL SELECT '8923320' -- Excel 第 133 行,方一锋,机构 892021
|
||||
UNION ALL SELECT '8923046' -- Excel 第 134 行,吴晓萍,机构 892012
|
||||
UNION ALL SELECT '8923363' -- Excel 第 135 行,朱晖,机构 892223
|
||||
UNION ALL SELECT '8925213' -- Excel 第 136 行,何佳文,机构 892014
|
||||
UNION ALL SELECT '8923810' -- Excel 第 137 行,金彬,机构 892083
|
||||
UNION ALL SELECT '8925535' -- Excel 第 138 行,何志琦,机构 892060
|
||||
UNION ALL SELECT '8925532' -- Excel 第 139 行,董栋,机构 892110
|
||||
UNION ALL SELECT '8923256' -- Excel 第 140 行,黄勇,机构 892060
|
||||
UNION ALL SELECT '8925159' -- Excel 第 141 行,吴学舟,机构 892145
|
||||
UNION ALL SELECT '8925462' -- Excel 第 142 行,李佳彬,机构 892146
|
||||
UNION ALL SELECT '8923493' -- Excel 第 143 行,张磊,机构 892060
|
||||
UNION ALL SELECT '8923599' -- Excel 第 144 行,徐江琴,机构 892210
|
||||
UNION ALL SELECT '8925208' -- Excel 第 145 行,潘列当,机构 892110
|
||||
UNION ALL SELECT '8925539' -- Excel 第 146 行,秦佳浩,机构 892100
|
||||
UNION ALL SELECT '8922824' -- Excel 第 147 行,许伟松,机构 892170
|
||||
UNION ALL SELECT '8923477' -- Excel 第 148 行,陈淑清,机构 892213
|
||||
UNION ALL SELECT '8925393' -- Excel 第 149 行,余恒涛,机构 892190
|
||||
UNION ALL SELECT '8923865' -- Excel 第 150 行,金洁琼,机构 892210
|
||||
UNION ALL SELECT '8923920' -- Excel 第 151 行,华盛榆,机构 892183
|
||||
UNION ALL SELECT '8923239' -- Excel 第 152 行,赵宏,机构 892213
|
||||
UNION ALL SELECT '8923369' -- Excel 第 153 行,陈丽君,机构 892050
|
||||
UNION ALL SELECT '8923541' -- Excel 第 154 行,赵珊,机构 892220
|
||||
UNION ALL SELECT '8925419' -- Excel 第 155 行,阮昕岚,机构 892014
|
||||
UNION ALL SELECT '8923119' -- Excel 第 156 行,李莹,机构 892035
|
||||
UNION ALL SELECT '8925596' -- Excel 第 157 行,郑炫奇,机构 892214
|
||||
UNION ALL SELECT '8925544' -- Excel 第 158 行,徐洁汀,机构 892090
|
||||
UNION ALL SELECT '8923723' -- Excel 第 159 行,王未,机构 892200
|
||||
UNION ALL SELECT '8923974' -- Excel 第 160 行,余菲菲,机构 892140
|
||||
UNION ALL SELECT '8923171' -- Excel 第 161 行,陈洲焰,机构 892101
|
||||
UNION ALL SELECT '8922199' -- Excel 第 162 行,章国栋,机构 892223
|
||||
UNION ALL SELECT '8923418' -- Excel 第 163 行,阮俊杰,机构 892030
|
||||
UNION ALL SELECT '8923708' -- Excel 第 164 行,严思培,机构 892050
|
||||
UNION ALL SELECT '8923607' -- Excel 第 165 行,刘明亮,机构 892160
|
||||
UNION ALL SELECT '8923839' -- Excel 第 166 行,董生超,机构 892161
|
||||
UNION ALL SELECT '8921175' -- Excel 第 167 行,俞曙光,机构 892041
|
||||
UNION ALL SELECT '8923308' -- Excel 第 168 行,叶超,机构 892172
|
||||
UNION ALL SELECT '8925564' -- Excel 第 169 行,张镇涛,机构 892083
|
||||
UNION ALL SELECT '8925067' -- Excel 第 170 行,袁江锋,机构 892211
|
||||
UNION ALL SELECT '8923531' -- Excel 第 171 行,夏威,机构 892200
|
||||
UNION ALL SELECT '8923813' -- Excel 第 172 行,赵佳伟,机构 892080
|
||||
UNION ALL SELECT '8923371' -- Excel 第 173 行,朱益浪,机构 892166
|
||||
UNION ALL SELECT '8923979' -- Excel 第 174 行,徐嘉婕,机构 892021
|
||||
UNION ALL SELECT '8925086' -- Excel 第 175 行,陈坚,机构 892051
|
||||
UNION ALL SELECT '8922166' -- Excel 第 176 行,任静钰,机构 892210
|
||||
UNION ALL SELECT '8923585' -- Excel 第 177 行,金鹏飞,机构 892200
|
||||
UNION ALL SELECT '8923548' -- Excel 第 178 行,阮锦薇,机构 892161
|
||||
UNION ALL SELECT '8925177' -- Excel 第 179 行,严翔,机构 892166
|
||||
UNION ALL SELECT '8925420' -- Excel 第 180 行,郑清枫,机构 892022
|
||||
UNION ALL SELECT '8925217' -- Excel 第 181 行,屠林洁,机构 892030
|
||||
UNION ALL SELECT '8922462' -- Excel 第 182 行,何文达,机构 892226
|
||||
UNION ALL SELECT '8923551' -- Excel 第 183 行,陈文波,机构 892132
|
||||
UNION ALL SELECT '8923587' -- Excel 第 184 行,徐霜霜,机构 892211
|
||||
UNION ALL SELECT '8923823' -- Excel 第 185 行,董佳杨,机构 892022
|
||||
UNION ALL SELECT '8923377' -- Excel 第 186 行,魏子涵,机构 892200
|
||||
UNION ALL SELECT '8922192' -- Excel 第 187 行,金智煌,机构 892223
|
||||
UNION ALL SELECT '8923654' -- Excel 第 188 行,杜圣磊,机构 892010
|
||||
UNION ALL SELECT '8925152' -- Excel 第 189 行,阮益权,机构 892192
|
||||
UNION ALL SELECT '8923580' -- Excel 第 190 行,金陈坷,机构 892170
|
||||
UNION ALL SELECT '8925311' -- Excel 第 191 行,章天豪,机构 892100
|
||||
UNION ALL SELECT '8925157' -- Excel 第 192 行,潘彬彬,机构 892080
|
||||
UNION ALL SELECT '8925068' -- Excel 第 193 行,沈天阳,机构 892161
|
||||
UNION ALL SELECT '8923689' -- Excel 第 194 行,傅俊杰,机构 892224
|
||||
UNION ALL SELECT '8923874' -- Excel 第 195 行,连郡,机构 892142
|
||||
UNION ALL SELECT '8923604' -- Excel 第 196 行,顾涵,机构 892142
|
||||
UNION ALL SELECT '8923899' -- Excel 第 197 行,杜燕燕,机构 892160
|
||||
UNION ALL SELECT '8923986' -- Excel 第 198 行,阮婷,机构 892090
|
||||
UNION ALL SELECT '8922523' -- Excel 第 199 行,金强,机构 892010
|
||||
UNION ALL SELECT '8925630' -- Excel 第 200 行,何一东,机构 892070
|
||||
UNION ALL SELECT '8925385' -- Excel 第 201 行,陈浩,机构 892160
|
||||
UNION ALL SELECT '8923579' -- Excel 第 202 行,吴滢榆,机构 892102
|
||||
UNION ALL SELECT '8923629' -- Excel 第 203 行,王洁,机构 892200
|
||||
UNION ALL SELECT '8925478' -- Excel 第 204 行,叶铃君,机构 892140
|
||||
UNION ALL SELECT '8923537' -- Excel 第 205 行,章吉丽,机构 892031
|
||||
UNION ALL SELECT '8925215' -- Excel 第 206 行,姚橙枫,机构 892090
|
||||
UNION ALL SELECT '8925038' -- Excel 第 207 行,曹铠宇,机构 892011
|
||||
UNION ALL SELECT '8923219' -- Excel 第 208 行,许蕾,机构 892011
|
||||
UNION ALL SELECT '8923836' -- Excel 第 209 行,徐宏来,机构 892050
|
||||
UNION ALL SELECT '8925128' -- Excel 第 210 行,陈梦宇,机构 892070
|
||||
UNION ALL SELECT '8923902' -- Excel 第 211 行,徐玉玮,机构 892030
|
||||
UNION ALL SELECT '8923258' -- Excel 第 212 行,严金锋,机构 892132
|
||||
UNION ALL SELECT '8923124' -- Excel 第 213 行,徐雪荣,机构 892191
|
||||
UNION ALL SELECT '8922187' -- Excel 第 214 行,沈颖冲,机构 892100
|
||||
UNION ALL SELECT '8925604' -- Excel 第 215 行,陈一鸣,机构 892166
|
||||
UNION ALL SELECT '8923627' -- Excel 第 216 行,徐佳斌,机构 892193
|
||||
UNION ALL SELECT '8923703' -- Excel 第 217 行,王河杰,机构 892080
|
||||
UNION ALL SELECT '8923211' -- Excel 第 218 行,龚世炎,机构 892012
|
||||
UNION ALL SELECT '8923647' -- Excel 第 219 行,沈冰妮,机构 892145
|
||||
UNION ALL SELECT '8925392' -- Excel 第 220 行,任琳,机构 892020
|
||||
UNION ALL SELECT '8923260' -- Excel 第 221 行,郑芦康,机构 892050
|
||||
UNION ALL SELECT '8925206' -- Excel 第 222 行,刘威,机构 892020
|
||||
UNION ALL SELECT '8925212' -- Excel 第 223 行,俞洁,机构 892101
|
||||
UNION ALL SELECT '8925427' -- Excel 第 224 行,阮天宇,机构 892020
|
||||
UNION ALL SELECT '8925028' -- Excel 第 225 行,李益斐,机构 892133
|
||||
UNION ALL SELECT '8923567' -- Excel 第 226 行,俞琴,机构 892030
|
||||
UNION ALL SELECT '8923293' -- Excel 第 227 行,马岚,机构 892080
|
||||
UNION ALL SELECT '8923875' -- Excel 第 228 行,吕姗珊,机构 892020
|
||||
UNION ALL SELECT '8923509' -- Excel 第 229 行,杜俊杭,机构 892214
|
||||
UNION ALL SELECT '8923720' -- Excel 第 230 行,陈云,机构 892031
|
||||
UNION ALL SELECT '8923323' -- Excel 第 231 行,王微,机构 892200
|
||||
UNION ALL SELECT '8925227' -- Excel 第 232 行,朱恒杰,机构 892171
|
||||
UNION ALL SELECT '8925423' -- Excel 第 233 行,章佳妍,机构 892070
|
||||
UNION ALL SELECT '8925221' -- Excel 第 234 行,柳奕帆,机构 892140
|
||||
UNION ALL SELECT '8923500' -- Excel 第 235 行,王锦瑜,机构 892200
|
||||
UNION ALL SELECT '8923971' -- Excel 第 236 行,任依婷,机构 892182
|
||||
UNION ALL SELECT '8923302' -- Excel 第 237 行,朱杰权,机构 892160
|
||||
UNION ALL SELECT '8923701' -- Excel 第 238 行,沈炜汉,机构 892130
|
||||
UNION ALL SELECT '8923292' -- Excel 第 239 行,阮严波,机构 892082
|
||||
UNION ALL SELECT '8925119' -- Excel 第 240 行,吕丹旋,机构 892141
|
||||
UNION ALL SELECT '8925125' -- Excel 第 241 行,范梦煖,机构 892010
|
||||
UNION ALL SELECT '8925477' -- Excel 第 242 行,徐天柱,机构 892113
|
||||
UNION ALL SELECT '8923515' -- Excel 第 243 行,高齐天,机构 892141
|
||||
UNION ALL SELECT '8923307' -- Excel 第 244 行,孙威,机构 892170
|
||||
UNION ALL SELECT '8923757' -- Excel 第 245 行,徐煊楷,机构 892183
|
||||
UNION ALL SELECT '8925396' -- Excel 第 246 行,陈益未,机构 892110
|
||||
UNION ALL SELECT '8923316' -- Excel 第 247 行,徐小雪,机构 892190
|
||||
UNION ALL SELECT '8925605' -- Excel 第 248 行,陈礼炀,机构 892220
|
||||
UNION ALL SELECT '8923459' -- Excel 第 249 行,章丽,机构 892224
|
||||
UNION ALL SELECT '8923616' -- Excel 第 250 行,宋灵蓉,机构 892111
|
||||
UNION ALL SELECT '8923389' -- Excel 第 251 行,张丹凤,机构 892200
|
||||
UNION ALL SELECT '8923870' -- Excel 第 252 行,曹坚,机构 892130
|
||||
UNION ALL SELECT '8923214' -- Excel 第 253 行,冯佳,机构 892112
|
||||
UNION ALL SELECT '8923759' -- Excel 第 254 行,吕琦,机构 892182
|
||||
) src
|
||||
JOIN sys_user u ON u.user_name = src.teller_no AND u.del_flag = '0'
|
||||
JOIN sys_role r ON r.role_name = '客户经理' AND r.status = '0' AND r.del_flag = '0';
|
||||
@@ -766,6 +766,7 @@ CREATE TABLE `loan_pricing_workflow` (
|
||||
`business_type` varchar(20) DEFAULT NULL COMMENT '业务种类',
|
||||
`loan_rate_history` varchar(100) DEFAULT NULL COMMENT '历史贷款利率',
|
||||
`coupon_rate` varchar(100) DEFAULT NULL COMMENT '存单票面利率',
|
||||
`res_cover` varchar(10) DEFAULT NULL COMMENT '余值覆盖: 0/1',
|
||||
`biz_proof` varchar(10) DEFAULT NULL COMMENT '是否有经营佐证: true/false',
|
||||
`loan_loop` varchar(10) DEFAULT NULL COMMENT '循环功能: true/false(贷款合同是否开通循环功能)',
|
||||
`coll_type` varchar(20) DEFAULT NULL COMMENT '抵质押类型: 一类/二类/三类/四类',
|
||||
@@ -776,6 +777,7 @@ CREATE TABLE `loan_pricing_workflow` (
|
||||
`id_type` varchar(50) DEFAULT NULL COMMENT '证件类型',
|
||||
`id_num` varchar(100) DEFAULT NULL COMMENT '证件号码',
|
||||
`is_inclusive_finance` varchar(10) DEFAULT NULL COMMENT '是否普惠小微借款人: true/false',
|
||||
`dept_id` bigint(20) DEFAULT NULL COMMENT '创建人部门ID',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
|
||||
@@ -783,6 +785,7 @@ CREATE TABLE `loan_pricing_workflow` (
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_serial_num` (`serial_num`),
|
||||
KEY `idx_org_code` (`org_code`),
|
||||
KEY `idx_dept_id` (`dept_id`),
|
||||
KEY `idx_create_by` (`create_by`),
|
||||
KEY `idx_cust_name` (`cust_name`),
|
||||
KEY `idx_update_time` (`update_time`)
|
||||
|
||||
@@ -348,6 +348,7 @@ CREATE TABLE `loan_pricing_workflow` (
|
||||
`business_type` varchar(20) DEFAULT NULL COMMENT '业务种类',
|
||||
`loan_rate_history` varchar(100) DEFAULT NULL COMMENT '历史贷款利率',
|
||||
`coupon_rate` varchar(100) DEFAULT NULL COMMENT '存单票面利率',
|
||||
`res_cover` varchar(10) DEFAULT NULL COMMENT '余值覆盖: 0/1',
|
||||
`biz_proof` varchar(10) DEFAULT NULL COMMENT '是否有经营佐证: true/false',
|
||||
`loan_loop` varchar(10) DEFAULT NULL COMMENT '循环功能: true/false(贷款合同是否开通循环功能)',
|
||||
`coll_type` varchar(20) DEFAULT NULL COMMENT '抵质押类型: 一类/二类/三类/四类',
|
||||
@@ -358,6 +359,7 @@ CREATE TABLE `loan_pricing_workflow` (
|
||||
`id_type` varchar(50) DEFAULT NULL COMMENT '证件类型',
|
||||
`id_num` varchar(100) DEFAULT NULL COMMENT '证件号码',
|
||||
`is_inclusive_finance` varchar(10) DEFAULT NULL COMMENT '是否普惠小微借款人: true/false',
|
||||
`dept_id` bigint(20) DEFAULT NULL COMMENT '创建人部门ID',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
|
||||
@@ -365,6 +367,7 @@ CREATE TABLE `loan_pricing_workflow` (
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_serial_num` (`serial_num`),
|
||||
KEY `idx_org_code` (`org_code`),
|
||||
KEY `idx_dept_id` (`dept_id`),
|
||||
KEY `idx_create_by` (`create_by`),
|
||||
KEY `idx_cust_name` (`cust_name`),
|
||||
KEY `idx_update_time` (`update_time`)
|
||||
|
||||
@@ -29,6 +29,7 @@ CREATE TABLE `loan_pricing_workflow` (
|
||||
`business_type` varchar(20) DEFAULT NULL COMMENT '业务种类',
|
||||
`loan_rate_history` varchar(100) DEFAULT NULL COMMENT '历史贷款利率',
|
||||
`coupon_rate` varchar(100) DEFAULT NULL COMMENT '存单票面利率',
|
||||
`res_cover` varchar(10) DEFAULT NULL COMMENT '余值覆盖: 0/1',
|
||||
`biz_proof` varchar(10) DEFAULT NULL COMMENT '是否有经营佐证: true/false',
|
||||
`loan_loop` varchar(10) DEFAULT NULL COMMENT '循环功能: true/false(贷款合同是否开通循环功能)',
|
||||
`coll_type` varchar(20) DEFAULT NULL COMMENT '抵质押类型: 一类/二类/三类/四类',
|
||||
@@ -39,6 +40,7 @@ CREATE TABLE `loan_pricing_workflow` (
|
||||
`id_type` varchar(50) DEFAULT NULL COMMENT '证件类型',
|
||||
`id_num` varchar(100) DEFAULT NULL COMMENT '证件号码',
|
||||
`is_inclusive_finance` varchar(10) DEFAULT NULL COMMENT '是否普惠小微借款人: true/false',
|
||||
`dept_id` bigint(20) DEFAULT NULL COMMENT '创建人部门ID',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
|
||||
@@ -46,6 +48,7 @@ CREATE TABLE `loan_pricing_workflow` (
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_serial_num` (`serial_num`),
|
||||
KEY `idx_org_code` (`org_code`),
|
||||
KEY `idx_dept_id` (`dept_id`),
|
||||
KEY `idx_create_by` (`create_by`),
|
||||
KEY `idx_cust_name` (`cust_name`),
|
||||
KEY `idx_update_time` (`update_time`)
|
||||
|
||||
Reference in New Issue
Block a user